我试图捕获引号中的所有短语以及下面示例中的括号之间:
body paragraph text (the "first phrase to capture" or the "second phrase to capture").
所以以下内容应该是匹配:"first phrase to capture"
和"second phrase to capture"
。我尝试使用负面的lookbehind如下,但我得到一个错误,说lookbehinds需要是零宽度。有没有其他方法可以使用正则表达式来实现它?
(?<=\(.*)(".*?")(?=.*\))
答案 0 :(得分:2)
应该足以使用lookahead。看看这是否符合您的要求:
"[^"(]*"(?=[^(]*\))
"[^"(]*"
所需的引用部分(?=[^(]*\))
预测检查是否在括号内Example at regex101; Regex FAQ
请注意,在@Sam评论的引用字符串中的括号内会失败。
答案 1 :(得分:2)
PCRE让我们可以很方便地访问\G
(匹配最后一个匹配的结尾或字符串的开头)和\K
(丢弃左边匹配的项目)等工具,从而实现这一目标:
(?: (?# begin non-capturing-group)
\( (?# match start of the parenthesis)
| (?# OR)
(?<!^) (?# unless we are at the beginning of the string)
\G (?# start at the end of the last match)
) (?# end non-capturing group)
[^)"]* (?# match until end of the parenthesis or start of quote)
\K (?# throw away everything to the left)
"([^"]*)" (?# capture 0+ characters inside double quotes)