正则表达式匹配父组中的重复组

我试图匹配另一个组下的多个组。


输入


182507 { 6661(T) }, 182514 { 5551(T), 5553(T), 5552(T) }

输出


Full match: 182507 { 6661(T) }

Group 1: 182507

Group 2: 6661(T)


Full match: 182514 { 5551(T), 5553(T), 5552(T) }

Group 1: 182514

Group 2: 5551(T)

Group 3: 5553(T)

Group 4: 5552(T)

我尝试了这种模式,但似乎没有我例外的工作


/([0-9]+)\s*\{\s*(\s*[0-9]+\s*\(\s*[A-Z]+\s*\))\s*?(?:,*\s*([0-9]+\s*\(\s*[A-Z]+\s*\))\s*)*+\s*\}+/



函数式编程
浏览 140回答 1
1回答

德玛西亚99

您的问题是重复捕获组仅捕获该组的最后一个匹配项,因此您的正则表达式不会捕获5553(T)字符串的第二部分。使用两步方法执行此操作可能更简单,首先匹配数字后面的部分 in {},然后将第二部分拆分为其组件:$string = '182507 { 6661(T) }, 182514 { 5551(T), 5553(T), 5552(T) }';preg_match_all('/(\d+)\s*{\s*([^}]+)\s*}/', $string, $matches);$output = array();foreach ($matches[1] as $key => $value) {    $output[$key] = array_merge(array($value), preg_split('/\s*,\s*/', $matches[2][$key]));}print_r($output);输出:Array(    [0] => Array        (            [0] => 182507            [1] => 6661(T)         )    [1] => Array        (            [0] => 182514            [1] => 5551(T)            [2] => 5553(T)            [3] => 5552(T)         ))
打开App,查看更多内容
随时随地看视频慕课网APP