如何在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
)
)
------- */
?>
答案 0 :(得分:2)
每次在模式中添加括号时,捕获在这些括号内匹配的内容并将其返回到结果中。这不仅会像你的情况那样烦人,而且也是不必要的开销。出于这些原因,每当您实际上不需要结果时,如果您确实需要分组,请删除括号(如果可能)或使用非捕获组(?:...)
:
@(?:[a-z]{2})?(lookbook)/?(\d+)?(?:\.html)?@
请注意(\d+)?
与(\d*)
相同(并非在所有情况和所有口味中都有,但在您的情况下是这样):
@(?:[a-z]{2})?(lookbook)/?(\d*)(?:\.html)?@