2013-08-12 29 views
0

如何刪除preg_match_all結果中的無用數組項目?如何刪除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)[email protected]',$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

刪除'()'從比賽你身邊不再想...即'( \ .html)'變成'\ .html' – naththedeveloper

+0

'([a-z] {2})?'似乎用來匹配示例字符串中的fr。正則表達式正如你期望的那樣工作嗎?或者'fr'沒用? – Jerry

+0

fr是無用的 –

回答

2

你加括號成圖形,每次,那捕捉什麼在這些括號內進行匹配並將其返回到結果中。這不僅可以像你的情況那樣令人討厭,而且也是不必要的開銷。由於這些原因,每當你實際上並不需要的結果,要麼刪除括號(如果可能的話),或使用非捕獲組(?:...),如果你確實需要分組:

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

注意(\d+)?是相同的作爲(\d*)(並非在所有情況下,所有的味道,但在你的情況下,它是):

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

Working demo.

+0

非常感謝。 –