回答:
次に、別の方法を示します(否定的な先読みを使用)。
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
注:キャプチャ式は1つだけです([a-z0-9]+)
。
(\?(.+))?$
高速でなければなりません。速度についてはあまり気にしません。
java.util.regex.Pattern
クラスを使用しています。
これはそれを行うはずです:
^/\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]+$
一致するには、両方の条件がtrueでなければなりません(ignoremeもignoreme2も許可されていません)。
/ignoremenot
、の/
後に続くようなものとは一致しませんignoreme
。