preg匹配所有get group多次

时间:2015-01-12 16:19:21

标签: php regex

我正在尝试获取正则表达式,以便在每次找到子组时获取子组。这是我的代码:

$string2 = 'cabbba';
preg_match_all('#c(a(b)*a)#',$string2,$result3,PREG_SET_ORDER);
var_dump($result3);

我的目标是获得''每次作为一个被捕获的组(所以3次)。此代码输出以下内容:

array (size=1)
  0 => 
    array (size=3)
      0 => string 'cabbba' (length=6)
      1 => string 'abbba' (length=5)
      2 => string 'b' (length=1)

我想让它显示' b'每次出现,都是这样的

array (size=1)
  0 => 
    array (size=3)
      0 => string 'cabbba' (length=6)
      1 => string 'abbba' (length=5)
      2 => array (size=3)
         0 => string 'b' (length 1)
         1 => string 'b' (length 1)
         2 => string 'b' (length 1)

这是一个简化的例子,在实际代码中,子模式' b'每次都会有所不同,但它遵循相同的模式。

2 个答案:

答案 0 :(得分:3)

这只能通过\G锚点来实现。

(?:ca|\G)(b)(?=b|(a))

DEMO

答案 1 :(得分:0)

您是否尝试为b*使用非贪婪修饰符?

$string2 = 'cabbba';
preg_match_all('#c(a(b)*?a)#', $string2, $result3, PREG_SET_ORDER);
var_dump($result3);

对不起,如果不是你问的话,我不确定我是否真的了解你的需求......

<强>更新 对不起,以前的回答是错的,请忽略它...
我正在努力制定一个正确的... ... 试试像

这样的东西
preg_match_all('#c(a(?:(b{1}))*a)#', $string2, $result3, PREG_SET_ORDER);

但它不起作用,......: - (

更新2:
Avinash Raj回答,我认为这很好......