例如,我有以下字符串:
(hello(world)) program
我想从字符串中提取以下部分:
(hello(world))
(world)
我一直在试用(\((.*)\))
这个词,但我只得到(hello(world))
。
如何使用正则表达式实现此目的
答案 0 :(得分:3)
正则表达式可能不是此任务的最佳工具。您可能希望使用标记生成器。但是,可以使用正则表达式完成,使用recursion:
$str = "(hello(world)) program";
preg_match_all('/(\(([^()]|(?R))*\))/', $str, $matches);
print_r($matches);
说明:
( # beginning of capture group 1
\( # match a literal (
( # beginning of capture group 2
[^()] # any character that is not ( or )
| # OR
(?R) # recurse the entire pattern again
)* # end of capture group 2 - repeat zero or more times
\) # match a literal )
) # end of group 1