获取正则表达式中所有可能的匹配项

时间:2014-03-24 12:08:44

标签: php regex

例如,我有以下字符串:

(hello(world)) program

我想从字符串中提取以下部分:

(hello(world))
(world)

我一直在试用(\((.*)\))这个词,但我只得到(hello(world))

如何使用正则表达式实现此目的

1 个答案:

答案 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

Demo