2014-06-18 56 views
-3

下面的代碼不工作是我使用解析從另一個功能正則表達式表達PHP

$LinkRegex = '/(?!(\d+\/\d+)\s*(\d{7,10})\s*)(?<Link>[0-9]{1,2}\/[0-9]{1,2}:?[0-9]?[0-9]?)/'; 

preg_match_all($LinkRegex, $row, $LinkMatches); 

foreach($LinkMatches["Link"] as $Links) 
     { 
      mysqli_query($con, "INSERT INTO Links (Order, Links) VALUES ('". $Order ."','". $Links ."')"); 
     } 

這是一個什麼樣的回報是我現在很匹配

21/8 664922003 0 0 1 21/1:26,21/1:27,21/1:28 

字符串的例子$ LinkMatches [「Link」]僅返回單個值'21/1:2'

它應返回以下3個值

21/1:26 
21/1:27 
21/1:28 

當我使用http://regex101.com測試儀時,上述哪種正則表達式可以做到這一點。有什麼關於PHP干擾這個表達式的回報?我使用preg_match_all,因爲我需要/ g標誌,我認爲這應該是正確的。此代碼適用於不包含可選「:xx」的其他喜歡。

+0

'order'是一個保留字的http:// dev.mysql.com/doc/refman/5.5/en/reserved-words.html或者用反引號包裝它,或者給它另一個名字。似乎很明顯,錯誤報告不是。 –

+1

你是否打算嘗試'var_dump($ LinkMatches)'來查看你從正則表達式返回的內容? –

+2

https://eval.in/164403 –

回答

0

現在$ LinkMatches [ 「鏈接」]是隻返回一個值 '21/1:使用preg_match_all當2'

這似乎很好地工作:

preg_match_all("/(?!(\d+\/\d+)\s*(\d{7,10})\s*)(?<Link>[0-9]{1,2}\/[0-9]{1,2}:?[0-9]?[0-9]?)/", "21/8 664922003 0 0 1 21/1:26,21/1:27,21/1:28", $matches, null, 0); 


// Dump the output for debugging. 
echo '<pre>'; 
print_r($matches); 
echo '</pre>'; 

而輸出是這樣的:

Array 
(
    [0] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

    [1] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
     ) 

    [2] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
     ) 

    [Link] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

    [3] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

) 

那就說,你可以馬柯這一點更可讀如果使用非捕獲組設定這樣?:

preg_match_all("/(?!(?:\d+\/\d+)\s*(?:\d{7,10})\s*)(?<Link>[0-9]{1,2}\/[0-9]{1,2}:?[0-9]?[0-9]?)/", "21/8 664922003 0 0 1 21/1:26,21/1:27,21/1:28", $matches); 

// Dump the output for debugging. 
echo '<pre>'; 
print_r($matches); 
echo '</pre>'; 

輸出將然後是這樣的:

Array 
(
    [0] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

    [Link] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

    [1] => Array 
     (
      [0] => 21/1:26 
      [1] => 21/1:27 
      [2] => 21/1:28 
     ) 

)