2013-07-20 7 views
8

У меня есть следующее регулярное выражение для соответствия всем словам текста, начинающегося с '+'.Как игнорировать экранированный символ в регулярном выражении?

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

Это хорошо работает и соответствует "+Foo or +Bar" к "+Foo" и "+Bar".

Как продлить регулярное выражение, чтобы игнорировать слова, начинающиеся с экранированного символа '+' - char?

"+Foo or +Bar but no \\+Hello" должны соответствовать, чтобы "+Foo" и "+Bar", но не в "+Hello".

(Он должен работать для JDK1.7.)

Заранее спасибо за любую помощь!

ответ

13

Вы могли бы попробовать negative lookbehind:

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

В общем, (?<!Y)X совпадает с X, не предшествует Y.

+2

Спасибо. Это работает! – t777

+0

@ t777 Без проблем, рад помочь. – arshajii

4

Вы можете использовать негативный взгляд-за:

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

Спасибо. Но не работает. Может быть, много обратных косых черт? ;) – t777

+0

@ t777. Ну, ладно. Вам просто нужно 4 обратной косой черты. –