0

如何删除 preg_match_all 结果中无用的数组项?

正则表达式中的某些项目对我没有用,我不希望它们显示在我的 $result 数组中,我该怎么做?我remmbered preg_match 可以在得到结果时删除无用的“(xxx)”,但我不记得现在如何编码

<?php 

$url='http://www.new_pm.com/fr/lookbook/2.html';
preg_match_all('@([a-z]{2})?(lookbook)/?(\d+)?(\.html)?@',$url,$result);
print_r($result);

/* ------- 
Array
(
    [0] => Array
        (
            [0] => lookbook/2.html
        )

    [1] => Array    // I don't want $result has this item
        (
            [0] => 
        )

    [2] => Array
        (
            [0] => lookbook
        )

    [3] => Array
        (
            [0] => 2
        )

    [4] => Array    // I don't want $result has this item
        (
            [0] => .html
        )

)
 ------- */
?>
4

1 回答 1

2

每次将括号添加到模式中时,都会捕获这些括号内匹配的任何内容并将其返回到结果中。这不仅会像您的情况一样令人讨厌,而且也是不必要的开销。出于这些原因,只要您实际上不需要结果,请删除括号(如果可能),或者(?:...)如果您确实需要分组,请使用非捕获组:

@(?:[a-z]{2})?(lookbook)/?(\d+)?(?:\.html)?@

请注意,(\d+)?这与(\d*)(并非在所有情况下和所有口味中,但在您的情况下都是)相同:

@(?:[a-z]{2})?(lookbook)/?(\d*)(?:\.html)?@

工作演示。

于 2013-08-12T07:36:26.983 回答