如何删除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)?@
工作演示。