匹配不包含子字符串的每个引用字符串

时间:2010-01-05 22:52:33

标签: regex regex-negation

多行测试字符串:

dkdkdkdk dkdkdkdk dkdkdkd dkdkdkd "hello" dkdkdkdkdk dkdkdk "goodbye.hello"  dkdkdkd kdkdkd kdkdkdk "hello.goodbye.hello" dddd "test" ssss "http:x-y.f/z/z" "" "."
"http:/dkdkd/dkdkdk/dkdkdkdkdkdk.g"

我想匹配包含“hello

的每个带引号的字符串

匹配每个引用的字符串

\"(.+?)\"

这匹配每个包含hello的字符串

\"(.*?)hello(.*?)\"

但是,这并不匹配每个不包含hello的引用字符串

\"(.*?)(?!hello)(.*?)\"

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我的初步答案是每次点匹配时都需要应用负向前瞻,如下所示:

\"((?!hello).)*?\"

但是,在包含多个带引号的字符串的目标中,此正则表达式存在问题 - 一个字符串的结束引号与另一个引号的开始字符串之间的空格也是此表达式的“引用字符串”。

因此,我的建议是使用简单的"[^"]*"模式从目标中提取所有引用的字符串,然后评估您要禁止的单词的每个匹配项。

答案 1 :(得分:0)

试试这个

\"((?!hello).)*?\"