Reputation: 1096
<?php
$string = 'This is my regular expression';
$array = array();
preg_match('/^.*((my)? regular (expression)?)$/i', $string, $array);
var_dump($array);
?>
After execution of this script I have:
array (size=4)
0 => string 'This is my regular expression' (length=29)
1 => string ' regular expression' (length=19)
2 => string '' (length=0)
3 => string 'expression' (length=10)
Why it doesn't output capturing group (my)?
Upvotes: 1
Views: 31
Reputation: 32189
That is because you have a greedy quantifier .*
before it. You should instead use a non greedy quantifier .*?
.
Do it as follows instead:
<?php
$string = 'This is my regular expression';
$array = array();
preg_match('/^.*?((my)? regular (expression)?)$/i', $string, $array);
var_dump($array);
?>
[OUTPUT]
array (size=4)
0 => string 'This is my regular expression' (length=29)
1 => string 'my regular expression' (length=21)
2 => string 'my' (length=2)
3 => string 'expression' (length=10)
Upvotes: 2