2010-08-23 6 views
22

Powiedz, że chcę dopasować znak "słowo" (\w), ale wyklucz "_" lub dopasuj znak odstępu (\s), ale wyklucz "\ t". Jak mogę to zrobić?Jak mogę wykluczyć niektóre postacie z zajęć?

+3

Z korzyścią dla innych, którzy mogą używać Java, .NET, schematu XML lub JGSoft/RegexBuddy istnieje faktycznie mechanizm charakter odejmowanie dla tych smaków: http://stackoverflow.com/questions/3201689/character-class-odejmowanie-konwertowanie-z-java-składnia-do-regexbuddy; na przykład '[a-z- [aeiou]]' w .NET dopasowuje małą spółgłoskę. – polygenelubricants

Odpowiedz

36

Użyj zanegowanej klasy zawierającej \ W lub \ S.

/[^\W_]/ # anything that's not a non-word character and not _ 
/[^\S\t]/ # anything that's not a non-space character and not \t 
+4

+1 Tą technikę nazywam [podwójnie negatywną] (http://stackoverflow.com/questions/3469080/match-whitespace-but-not-newlines-perl/3469155#3469155). –