2016-01-06 73 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。 –