正则表达式:结合负向前瞻和常规搜索

时间:2015-11-10 21:21:11

标签: regex

我想结合两个正则表达式。第一个是负向前瞻:

^(.(?!(test)))*$

它匹配我的不包含“test”的数据。

现在我想将它与基本搜索结合起来:我想找到不包含“test”(字符串1)但包含“fix”(字符串2)的数据。如何将这两者合并为一个正则表达式?

就我的目的而言,只要“测试”没有出现并且出现“修复”,这些字符串出现的位置并不重要。

2 个答案:

答案 0 :(得分:3)

^(?!.*test)(?=.*fix)(.*)$

Regular expression visualization

Debuggex Demo

是一个通用的解决方案。因为正则表达式已被解析所以正则表达式游标不会移动,所以看起来的顺序并不重要。

我唯一想说的就是这个,我就是这样做的,因为那就是你的正则表达式是什么,如果有像fixedtested这样的词,那些就会被抓住通过展望未来。你可以通过添加单词边界来改变它

^(?!.*\btest\b)(?=.*\bfix\b)(.*)$

编辑:如果要匹配多行,请取出/ m并替换为/ s或更改.令牌

^(?![\s\S]*test)(?=[\s\S]*fix)([\s\S]*)$

答案 1 :(得分:0)

这些方法中的任何一种都可行:

输入1

 # ^(?!.*test)(?=.*fix).*$

 ^ 
 (?! .* test )
 (?= .* fix )
 .* 
 $ 

类型2

 # ^(?:(?!test).)*fix(?:(?!test).)*$

 ^ 
 (?:
      (?! test )
      . 
 )*
 fix
 (?:
      (?! test )
      . 
 )*
 $