您如何使用 RegExp 确定子字符串是否在括号之间?

How do you determine, using RegExp, whether or not a substring is between parentheses?

可能重复;我以为这个问题应该已经有人问过了,但是我搜索了一下却找不到。

如何使用正则表达式判断子字符串是否在括号之间?

假设我要检查以下句子中的文本“fox”是否被括号括起来:

The (quick) brown fox jumps (over the lazy) dog.

我试过这个正则表达式,但当“fox”实际上没有括号但左右都有括号时它测试为真:

\(.*?fox.*?\)

我用负向后视和负向前视都试过了,也没用:

\(.*?(?<!\)).*?fox.*?(?!\().*?\)

这将匹配括号中的任何术语:

\(.*?\)

(快)棕狐跳(越过)懒狗

这个问号将确保正则表达式是 'lazy' 并且只会匹配右括号的第一个实例。

像这样删除问号:\(.*\) 将为您提供以下匹配项,这可能不是您想要的:

(快速)棕色狐狸跳过(越过) 懒狗。

如果您只想匹配“(fox)”,那么正确的正则表达式是:

\(fox\)

您可以使用在线正则表达式测试器或文本编辑器来回答此类问题。

这里有一种方法可以保证单词仅存在于内部括号中,而不存在于嵌套的内容中:

https://regex101.com/r/UlQpM6/1

\([^()]*fox[^()]*\)

\( - 打开

[^()]* - 0 个或多个非括号的字符

fox - 狐狸

[^()]* - 重复模式

\) - 关闭