Регулярное выражение для исключения слова / строки - PullRequest
240 голосов
/ 17 января 2010

У меня есть регулярное выражение:

^/[a-z0-9]+$

Соответствует строкам, таким как /hello или /hello123.

Однако я бы хотел исключить пару строковых значений, таких как /ignoreme и /ignoreme2.

Я пробовал несколько вариантов, но, похоже, не смог заставить их работать!

Моя последняя слабая попытка была

^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$

Любая помощь будет с благодарностью: -)

Ответы [ 3 ]

307 голосов
/ 17 января 2010

Вот еще один способ (использование негативного прогнозирования ):

^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$ 

Примечание: есть только одно выражение захвата: ([a-z0-9]+).

36 голосов
/ 17 января 2010

Это должно сделать это:

^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)

Вы можете добавить столько игнорируемых слов, сколько захотите, вот простая реализация PHP:

$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');

preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string);
16 голосов
/ 17 января 2010

Поскольку вы хотите исключить оба слова, вам нужна конъюнкция:

^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$

Теперь оба условия должны быть истинными (ни ignoreme , ни ignoreme2 не допускается) для совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...