2016-01-06 104 views
2

我一直在使用regexr.com構建和測試正則表達式以在我的php程序中使用。然而,有了這一個特殊的表達,它似乎在網站上工作,但不在程序中,我不知道爲什麼PHP正則表達式不起作用

我想在以下字符串中匹配歐盟標籤數據(例如:GC 71):

"Viking SnowTech II 165/70 R13 79T Winterreifen Auf Lager G C 71 dBKundenbewertung (2.00) 29,50 € Details In den Einkaufswagen" 

正則表達式 '#\ S \ W \ S \ W \ S \ d {1,}#' 工作正常上regexr.com但發現在我的計劃不匹配

$eulab = $row_html -> plaintext; 
     if(preg_match('#\s\w\s\w\s\d{1,}#', $eulab)){ 
      $insert['eulab'] = $matches[0]; 

     }else { 
      echo "No Match"; 
     } 

我已嘗試其他表達式,例如\ s {1} [AZ] {1} \ s {1} [AZ] {1} \ s {1} \ d {1,} \ s {1}也適用於regexr但在我的程序中找不到匹配項。這可能是一個編碼問題嗎?或者只是我的PHP語法?沒有錯誤被拋出。

+2

我想你想傳遞一個第三個參數爲'$ matches'?!請參閱:https://3v4l.org/VDhFM – Rizier123

+0

也可以查看http://www.phpliveregex.com/p/e9W,它爲您構建函數。 – chris85

+0

我原來是這樣的......我只是把它加回來,它仍然給我沒有匹配。這讓我覺得問題出在$ row_html - >明文。它可能是在不同的編碼? – Zane

回答

0

我的問題是,當真的有更多的時候,瀏覽器只顯示一個空格。我改變了表達式來糾正這個問題,它工作。通過@ chris85上述

我的最終代碼和表達解決

問題是:

 $eulab = $row_html -> plaintext; 

     if(preg_match('#\s\w\s+\w\s+\d+#', $eulab, $matches)){ 

      $insert['eulab'] = str_replace(" ", "", $matches[0]); 
     } 
+1

您應該添加您更新的正則表達式。另外'\ d {1,}'可能只是'\ d +'。 '+ +是前面的一個或多個字符。 – chris85

+0

使用UTF-8?您可能想要調查/ u模式修飾符。或者,在你的情況下#u。 –