2010-09-04 5 views
7

Я потратил некоторое время, но все же должен решить. Мне нужно регулярное выражение, которое может соответствовать словам со знаками в нем (например, C++) в строке.Регулярное совпадение с символами + (плюс)

Я использовал /\bword\b/, для «обычных» слов он работает нормально. Но как только я попробую /\bC\+\+\b/, он просто не работает. Некоторые из них работают неправильно с плюсами в нем.

Мне нужно регулярное выражение, чтобы определить, содержит ли строка ввода C++ слово. Ввод как,

"c++ developer" 
"using c++ language" 

т.д.

пс. Использование функции C# .Net Regex.Match.

Спасибо за помощь!

ответ

15

+ это специальный символ, так что вам нужно, чтобы избежать его

\bC\+\+(?!\w) 

Обратите внимание, что мы не можем использовать \b потому + не слово-символ.

+0

Привет, Кенни, я использую его. Он не отображался в поле зрения. Я исправил вопрос. Не работает так. –

+0

@alex: Вы пробовали '(?! \ W)'? – kennytm

+0

с (?! \ W) он делает именно то, что мне нужно! спасибо большое –

2

Знак плюса имеет особое значение, поэтому вам придется избегать его с помощью \. То же правило относится и к этим признакам: \, *, +, ?, |, {, [, (,), ^, $,., #, и белое пространство

UPDATE: проблема была с \b последовательностью

5

Проблема не с плюс характер, что вы избежали правильно, но \b последовательности. Он указывает границу слова, которая является точкой между символом слова (буквенно-цифровым) и чем-то другим. Плюс не является символом слова, поэтому для соответствия \b должен быть символ слова сразу после последнего знака плюса.

\bC\+\+\b соответствует «Test C++ Test», но не «Test C++ Test», например. Попробуйте что-нибудь вроде \bC\+\+\s, если вы ожидаете, что после последнего знака плюс появится пробел.

+0

В частности '\ b' совпадает между' \ w' и '\ W' (или наоборот). – Richard

+0

Благодарим вас за отличный ответ! \ bC \ + \ + \ s, отлично работает, но также соответствует пробелу после последнего + знака, это не большая проблема, но в любом случае немного неожиданно. –

+0

@alexander Вы можете сделать пространство удобным для просмотра, чтобы не включать его в соответствие: '\ bC \ + \ + (? = \ S)'. –

0

Как другие сказал, ваша проблема не + знака вы убежали правильно, но \b, что является нулевым символом клыков, которые соответствуют границе слова, которое происходит между словом \w и несловообразующим \W полукокса.

Существует также еще одна ошибка в своем регулярном выражении, вы хотите, чтобы соответствовать полукокса C (в верхнем регистре) с c++ (в нижнем регистре) .Чтобы сделать это, вы должны изменить регулярное выражение /\bc\+\+/ или использовать модификатор i, чтобы соответствовать без учета регистра: /\bc\+\+/i

Смежные вопросы