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

rom*_*iem 266 regex

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

^/[a-z0-9]+$
Run Code Online (Sandbox Code Playgroud)

这匹配字符串,如/hello/hello123.

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

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

我最近的微弱尝试是

^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$
Run Code Online (Sandbox Code Playgroud)

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

Set*_*eth 340

这是另一种方式:(使用否定预测):

^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$ 
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我不起作用,而 Alix Axel 的解决方案确实有效。我正在使用 Java 的 `java.util.regex.Pattern` 类。 (2认同)
  • 我确认 Mark 的 reMark ;) - 例如,Pycharm 是基于 Java 的,不是吗?因此,考虑到 Pycharm 搜索 Alix 的解决方案中的正则表达式有效,另一个则无效。 (2认同)

Ali*_*xel 40

这应该这样做:

^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)
Run Code Online (Sandbox Code Playgroud)

您可以根据需要添加尽可能多的忽略单词,这是一个简单的PHP实现:

$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');

preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string);
Run Code Online (Sandbox Code Playgroud)

  • @AlixAxel确实如此,但是更聪明的正则表达式库将允许替代方案(并使用最长的)进行不同长度的交替,只要每个替代方案具有固定长度. (2认同)

小智 30

这将从搜索结果中排除所有包含ignoreme的行。当连续有任何字符时它也能很好地工作

^((?!ignoreme).)*$
Run Code Online (Sandbox Code Playgroud)


Gum*_*mbo 17

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

^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$
Run Code Online (Sandbox Code Playgroud)

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

  • @ChrisF不,不是真的.Seth的解决方案与`/ ignoremenot`不匹配,因为`/`后跟`ignoreme`. (4认同)