2016-05-05 3 views
4

Предполагая, что я хочу:Regex Match All If?

TESTGRID - NOT MATCH 
testgrid - NOT MATCH 
ACTIVEID - MATCH 
activeID - MATCH 
testRID - MATCH 

Я пробовал:

(?!([^GR]))ID*?\b (I really thought I had it with this one - Don't match ID if it is preceeded with GR, right? 
(?!([^GRID]))ID*?\b 
(?!([GRID]))ID*?\b 

Ни одна из которых работает.

Я клянусь, я становлюсь лучше с регулярным выражением, хотя :) Я сумел выбить последние 6 попыток, не ища помощи от SO, но я еще раз застрял :(

+0

Возможно, вы имели в виду '(?

+0

Wiktor, вот и все. (? John

ответ

3

Дон «т соответствует ID, если он предваряется с GR

Если вы имеете в виду, чтобы соответствовать ID, которое в конце слова, а не предшествуют с GR, используйте

(?<!GR)ID\b 

См this regex demo

Обратите внимание, что (?<!GR) является отрицательным, что с просмотром назад проваливает матч, если шаблон просмотра назад находит совпадение слева от текущей позиции в строке. Если вы используете [^GR], отрицательный класс символов, то проверяется только один символ/символ (символ, отличный от G и R), а не символ последовательность.

+0

В этом случае я просто хочу ID в конце слова. Я был близок, и вы указали мою ошибку, так что спасибо :) Я соглашусь еще через 8 минут. – John

+0

Я удалил ненужную часть и добавил демонстрационную ссылку. –