所以我在这里找到了正则表达式,它在括号中找到文字:
preg_match_all('/\(((?:[^\(\)]++|(?R))*)\)/', $string, $matches)
这很好用。问题是当我添加我想要开头的文本时:preg_match_all('/(text)\(((?:[^\(\)]++|(?R))*)\)/', $string, $matches)
然后它只适用于这样的字符串:
text(some text between parentheses and starting with "text")
但是我也需要它来处理这样的字符串:
text(some text between parentheses (more text between parentheses) and starting with "text")
据我所知,问题在于这部分(?R)(递归),但我不知道如何更改此正则表达式以使用我想要的字符串。
答案 0 :(得分:1)
您可以将正则表达式更改为:
$re = '/text ( \( (?: [^()]* | (?-1) )* \) )/x';
括号内的文字在组#1中可用。
PCRE中的 (?-1)
是以前编号的捕获组的反向引用。
<强>更新强>
根据下面的评论,OP希望在括号中捕获文本但不捕获括号。这个正则表达式应该有效:
$re = '/text ( \( ( (?: [^()]* | (?-2) )* ) \) )/x';
在括号中检查捕获的组#2中的文本。