Я пытаюсь получить регулярное выражение, чтобы получить подгруппу каждый раз, когда она будет найдена. Это мой код:
$string2 = 'cabbba';
preg_match_all('#c(a(b)*a)#',$string2,$result3,PREG_SET_ORDER);
var_dump($result3);
Моя цель - каждый раз получать "b" в виде захваченной группы (так 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" будет отличаться каждый раз, но он следует той же схеме.
Вы пытались использовать не-жадный модификатор для вашего b*
?
$string2 = 'cabbba';
preg_match_all('#c(a(b)*?a)#', $string2, $result3, PREG_SET_ORDER);
var_dump($result3);
Извините, если это не то, что вы спросили, я не уверен, что я действительно понял ваши потребности...
UPDATE: Извините, предыдущий ответ неправильный, пожалуйста, проигнорируйте его...
Я пытаюсь разработать правильный...
Просто попробуйте что-то вроде
preg_match_all('#c(a(?:(b{1}))*a)#', $string2, $result3, PREG_SET_ORDER);
но он не работает, либо... :-(
ОБНОВЛЕНИЕ 2:
См. Ответ Avinash Raj
, я думаю, это неплохо...
(b)*
захватывает только последнийb
в большем количестве б