Ответ 1
Вот еще один способ (использование негативного прогнозирования):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
Примечание. Существует только одно выражение захвата: ([a-z0-9]+)
.
Я имею регулярное выражение следующим образом:
^/[a-z0-9]+$
Это соответствует строкам, таким как /hello
или /hello123
.
Однако я бы хотел, чтобы он исключил пару строковых значений, таких как /ignoreme
и /ignoreme2
.
Я пробовал несколько вариантов, но не могу заставить их работать!
Моя последняя неудачная попытка была
^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$
Любая помощь будет с благодарностью оценена: -)
Вот еще один способ (использование негативного прогнозирования):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
Примечание. Существует только одно выражение захвата: ([a-z0-9]+)
.
Это должно сделать это:
^/\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);
Как вы хотите исключить оба слова, вам понадобится объединение:
^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$
Теперь оба условия должны быть истинными (ни игнорировать, ни игнорировать 2), чтобы иметь соответствие.