2015-04-25 10 views
6

Chcę dopasować [a-z] tylko wyjątkiem liter a,e,i,o,uJak dopasować wszystkie alfabet oprócz kilku?

Korzystanie zanegowane ustawić [^aeiou]* mogłem dopasować wszystko z wyjątkiem a,e,i,o,u, ale jak ograniczyć mój everything do [a-z]?

Można to łatwo zrobić za pomocą odejmowania klasy znaków ([a-z-[aeiou]]) w XML Schema, XPath, .NET (2.0+) i smakach Jgeosoft regex, ale jak mogę to zrobić w PCRE?

Odpowiedz

9

Możesz użyć negatywnej asercji z wyprzedzeniem. To jak odejmowanie.

(?![aeiou])[a-z] 
    ^ ^
    |  | 
subtract from 

DEMO

+0

Perfect! .. jest to możliwe, aby uchwycić mecze w grupach? próbowałem '(?! [aeiou]) ([az]) +?' [DEMO] (https://regex101.com/r/aA6eK0/3) .. mecze są pojedynczymi literami. –

+0

Musisz owiń pareny wokół całego RE: '((?? [aeiou]) [az])' dla jednego lub '((?: (?! [aeiou]) [az]) +)' dla wielu (jeden lub więcej więcej), myślę. Możesz oderwać się za + po pierwszym RE, którego proponuję. –

+1

https://regex101.com/r/aA6eK0/4 –

Powiązane problemy