正则expression式排除一个字/string
我有一个正则expression式如下:
^/[a-z0-9]+$
这匹配诸如/hello
或/hello123
。
不过,我希望它排除一些string值,如/ignoreme
和/ignoreme2
。
我已经尝试了几个变种,但似乎无法得到任何工作!
我最近一次微弱的尝试是
^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$
任何帮助将不胜感激:-)
还有一种方法:(使用负面预测 ):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
注意:只有一个捕捉expression式: ([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]+$
现在,这两个条件必须是真实的(既不能忽视也不能忽视 )才能有一个匹配。