如何匹配在匹配字符串之前不包含单词的字符串?

时间:2019-06-30 13:28:23

标签: c# regex

通读堆栈溢出示例,我找不到以下测试用例的有效解决方案。

我需要将要测试的模式与字符串列表进行匹配。

如果word1存在,则模式应该匹配,但是word2在它之前不存在。 两者之间可以存在任何字符。

示例: 模式-如果单词tty_osc存在并且mov_osc在它之前的任何位置都不存在,则匹配。

  1. abd.defg.mov_osc.ccr.tty_osc.val-不匹配... tty_osc存在,但mov_osctty_osc之前也存在
  2. abd.defg.ccr.tty_osc.val-匹配-tty_osc存在,之前没有mov_osc

我在正则表达式后面尝试了以下否定式-(?<!mov_osc).*tty_osc

2 个答案:

答案 0 :(得分:0)

您可以使用否定的前瞻来断言右边不是您禁止的字词,然后是被接受的字词。

^(?!.*?\bmov_osc\b.*?\btty_osc\b).*?\btty_osc\b.*$

Regex demo

答案 1 :(得分:0)

您需要将.*移到(?<!mov_osc.*)tty_osc后面的负面表情中。否则它将与tty_osc之前的所有内容匹配,并且后面的否定外观将仅检查字符串的开头。

RegexStorm.Net Demo