我发现了一些类似的表达
\((.*?)\)
可以很好地找到括号中的任何文本,如(文本)
和
^((?!.*(word1|word2|word3)).*)+
查找不包含任何特定单词的文本,例如word4abcd,而不是例如 word1 测试
如何合并它们以查找括号中不包含这些单词的文本,例如 in (example)和 not like (example word2)?
提前致谢
第一个正则表达式使用一个不情愿的量词*?
来确保第一个可用的右括号在左括号之后匹配。第二个正则表达式使用零宽度负前瞻组(即(?!...)
构造)来防止匹配某些单词。为了结合这些技巧,我们正在研究这样的事情:
\(((?!something).*?)\)
问题是代替something
. 简单地放在.*(word1|word2)
那里是行不通的:这也将禁止word1
或word2
在括号之外。替换.*
为.*?
不会改变这一点。起作用的是[^)]*(word1|word2)
将匹配任何不等于 or 的)
字符word1
序列word2
。
然后得到的表达式是
\(((?![^)]*(word1|word2)).*?)\)
这将匹配不包含word1
或的括号表达式word2
。
问题不是很清楚,但我举一个可能对你有帮助的例子。
看看这个正则表达式:
/\((?!.*?\bexample\s+word\b[^)]*\)).*?\bexample\b.*?\)/
这匹配example
方括号内的单词。example word
如果方括号中没有,则匹配将发生。
\b
已用于单词边界,因此examples
不匹配。
也许这就是你想要的?
^\(((?!.*word1)(\S)*)|(\3)\)
匹配:(wordwordexample)不匹配:(word wordexample)(word1wordexample)