2013-07-20 20 views
8

Mam następujące wyrażenie regularne pasujące do wszystkich słów w tekście rozpoczynającym się od "+".Jak zignorować znak Escaped w wyrażeniu regularnym?

Pattern.compile("\\+[\\w-]+"); 

Działa to dobrze i pasuje "+Foo or +Bar" do "+Foo" i "+Bar".

Jak przedłużyć wyrażenie regularne, aby zignorować słowa rozpoczynające się od znaku "+" znaku z symbolem Esc?

"+Foo or +Bar but no \\+Hello" powinien pasować do "+Foo" i "+Bar"ale nie do "+Hello".

(powinna ona działać na JDK1.7.)

Z góry dziękuję za wszelką pomoc!

Odpowiedz

13

Można było spróbować negative lookbehind:

(?<!\\(\\{2})*)\+[\w-]+ 

Ogólnie (?<!Y)X dopasowuje X który nie jest poprzedzony Y.

+2

Dzięki. To działa! – t777

+0

@ t777 Nie ma problemu, miło mi pomóc. – arshajii

4

Można użyć ujemny look-za:

Pattern.compile("(?<!\\\\)\\+[\\w-]+"); 
+1

Dzięki. Ale nie działa. Może być wiele backslashes? ;) – t777

+0

@ t777. Cóż, prawda. Potrzebujesz tylko 4 ukośników. –

Powiązane problemy