获取以特定字符串开头且位于括号之间的文本中的所有匹配项

时间:2018-05-18 15:54:19

标签: php regex preg-match-all

所以我在这里找到了正则表达式,它在括号中找到文字:

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)(递归),但我不知道如何更改此正则表达式以使用我想要的字符串。

1 个答案:

答案 0 :(得分:1)

您可以将正则表达式更改为:

$re = '/text ( \( (?: [^()]* | (?-1) )* \) )/x';

RegEx Demo

括号内的文字在组#1中可用。

PCRE中的

(?-1)是以前编号的捕获组的反向引用。

<强>更新

根据下面的评论,OP希望在括号中捕获文本但不捕获括号。这个正则表达式应该有效:

$re = '/text ( \( ( (?: [^()]* | (?-2) )* ) \) )/x';

RegEx Demo 2

在括号中检查捕获的组#2中的文本。