我有一个正则表达式如下:
^/[a-z0-9]+$
这会匹配/hello
或/hello123
等字符串。
但是,我希望它排除一些字符串值,例如/ignoreme
和/ignoreme2
。
我尝试了一些变种,但似乎无法正常工作!
我最近的微弱尝试是
^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$
感谢任何帮助: - )
答案 0 :(得分:294)
这是另一种方式:(使用negative look-ahead):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$
注意:只有一个捕获表达式:([a-z0-9]+)
。
答案 1 :(得分:35)
这应该这样做:
^/\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);
答案 2 :(得分:14)
如果你想排除这两个词,你需要一个结合:
^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$
现在两个条件必须为真( ignoreme , ignoreme2 都不允许)才能匹配。
答案 3 :(得分:0)
更简单:
re.findall(r'/(?!ignoreme)(\w+)', "/hello /ignoreme and /ignoreme2 /ignoreme2M.")
您将得到:
['hello']
答案 4 :(得分:0)
这会从搜索结果中排除所有包含 ignore 的行。当一行中有任何字符时,它也能很好地工作
^((?!ignoreme).)*$
答案 5 :(得分:0)
这对我有用:
^((?!\ignoreme1\b)(?!\ignoreme2\b)(?!\ignoreme3\b).)*$