首页 文章

用于排除单词/字符串的正则表达式

提问于
浏览
202

我有一个正则表达式如下:

^/[a-z0-9]+$

这匹配 /hello/hello123 等字符串 .

但是,我希望它排除一些字符串值,如 /ignoreme/ignoreme2 .

我尝试了一些变种,但似乎无法开始工作!

我最近的微弱尝试是

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

任何帮助将不胜感激:-)

3 回答

  • 262

    这是另一种方式:(使用negative look-ahead):

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

    注意:只有一个捕获表达式: ([a-z0-9]+) .

  • 32

    如果你想排除这两个词,你需要一个结合:

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

    现在两个条件必须为真(无论是ignoreme还是ignoreme2都不允许)才能匹配 .

  • 13

    这应该这样做:

    ^/\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);
    

相关问题