需要在正则表达式中创建一个 NOT LIKE Con​​dition1 OR Condition2 Or Condition3 等价物

Need to create a NOT LIKE Condition1 OR Condition2 Or Condition3 equivalence in Regex

我正在尝试在 Regex 中进行 NOT LIKE Con​​dition1 OR Condition2 OR Condition3 等价。我想找到 not 包含任何子字符串 RSBO,RRABO,RSISTA0

的所有字符串

从这个线程 here 我得出结论,可以编写 ^((?!RSISTA0).)*$ 来查找所有不包含短语 RSISTA0

的字符串

所以对于我的要求,当我必须满足三个条件时,我尝试了:

^((?!RSBO).)*$|^((?!RRABO).)*)$|^((?!RSISTA0).)*$

,但后来我认为 | 操作可能应该是 AND 等价。为此,我发现可以模仿 AND 操作 here

这给了我解决方案:

(?=^((?!RSBO).)*$)(?=^((?!RRABO).)*)$(?=^((?!RSISTA0).)*$)

然而,这导致我根本 return 任何字符串,即使我知道有一些字符串不包含我需要过滤掉的任何子字符串。

有人知道吗?

你很接近。您只需要像这样在否定前瞻中放置要排除的词:

^(?:(?!RSBO|RRABO|RSISTA0).)*$

它不会匹配任何包含 RSBORRABORSISTA0 的单词,但会匹配任何其他文本。

See the demo

^((?!RSBO)(?!RSISTA0)(?!RRABO).)*$

我相信这可以解决问题。在 regex101 上测试成功。可能效率低下,因为它会向前看每个角色,但我找不到解决方法。

编辑:我认为不需要一开始就积极展望未来,所以我将其从我的原始答案中删除。