简体   繁体   English

不输出正则表达式中的捕获组

[英]The capturing group in the regular expression isn't output

<?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)? 为什么不输出捕获组(我)?

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);
?>

DEMO DEMO

[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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM