如何删除preg_match_all结果中不有用的数组项


how to remove unuseful array items in preg_match_all result?

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

regex中的一些项对我没有用处,我不希望它们显示在$result数组中,我该怎么做?我记得当得到结果时,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
        )
)
 ------- */
?>

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

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

注意,('d+)?('d*)相同(不是在所有情况和所有口味中,但在您的情况下是这样):

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

工作演示。