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

时间:2013-08-12 07:10:32

标签: php regex

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

正则表达式中的一些项目对我没用,我不希望它们显示在我的$ 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
        )

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

Working demo.