括号中的文本的正则表达式,不包含特定单词

时间:2013-09-29 11:48:11

标签: java regex

我发现了一些像

这样的表达方式
\((.*?)\) 

可以很好地找到括号中的任何文字,例如(文本)

^((?!.*(word1|word2|word3)).*)+

查找不包含任何特定字词的文字,例如 word4abcd ,而不是示例word1测试

如何合并它们以在括号中查找不包含这些词语的文字,如(示例)而不是(示例word2)

提前致谢

3 个答案:

答案 0 :(得分:1)

第一个正则表达式使用不情愿的量词*?来确保第一个可用的右括号在开始括号后匹配。第二个正则表达式使用零宽度负前瞻组(即(?!...)构造)来防止匹配某些单词。为了结合这些技巧,我们正在寻找类似的东西:

\(((?!something).*?)\)

问题是代替something的问题。简单地将.*(word1|word2)放在那里就行不通了:这也会禁止word1word2在括号之外。将.*替换为.*?不会改变这一点。 [^)]*(word1|word2)的作品是什么,它将匹配不等于)后跟word1word2的任何字符序列。

结果表达式是

\(((?![^)]*(word1|word2)).*?)\)

将匹配不包含word1word2的括号中的表达式。

答案 1 :(得分:0)

问题不是很明确,但我举一个可能对你有帮助的例子。

看看这个正则表达式:

/\((?!.*?\bexample\s+word\b[^)]*\)).*?\bexample\b.*?\)/

这匹配方括号内的单词example。如果方括号中没有example word,则会发生匹配。

\b已用于字边界,因此examples不匹配。

答案 2 :(得分:0)

也许这就是你想要的?

^\(((?!.*word1)(\S)*)|(\3)\)

匹配:(wordwordexample) 不匹配:( word wordexample)                (word1wordexample)

相关问题