正则表达式匹配不包含其他两个子串的字符串

时间:2011-08-23 04:34:33

标签: regex

所以,

我需要一个正则表达式来匹配一个不包含几个子串的字符串。我希望正则表达式匹配其中包含/paths的所有行,除非它们在string1之前包含string2/paths

不匹配:
foo = string1("/paths
string2 + "/paths
string1 = "/paths
"#{string2}/paths

但匹配:
source("/paths
bg : "/paths

由于

5 个答案:

答案 0 :(得分:2)

请查看this,特别是有关正面和负面观察的部分。

类似于(这是未经测试的)这个:

(?<!*?string1*?|*?string2*?)"/paths"

答案 1 :(得分:1)

如果您使用支持前瞻的风格,这将起作用:

^(?:(?!string1|string2|/paths).)*/paths

答案 2 :(得分:0)

您可能希望绕过另一种方法来执行此操作和if / else,即检查字符串中的string1或string2,如果找到它,则不要处理。

if "string1" in string or "string2" in string then
  ...
else
  process
end if 

答案 3 :(得分:0)

我使用以下sed命令执行此操作 sed -i -e '/string1\|string2/!s/paths/fix_paths/gI' FILE_NAME

它并没有在我的路径之前完全搜索字符串,但它符合我的意图匹配并适用于我的特定情况。

感谢大家的帮助

答案 4 :(得分:0)

你有一个grep代表你想要的东西而另一个代表-v代表你不是什么:

$ grep want_string input_file | grep -v unwant_string