2010-09-11 162 views
1

我刚刚在another thread的帮助下使用了经过验证的正则表达式。我可以看到它实际上在Rubular上工作,但是当我将正则表达式插入preg_match时,我完全没有任何东西。有没有人看到为什么我的preg_match RegEx没有返回结果?

这里是我的preg_match功能的正则表达式:

preg_match('/^!!([0-9]{5}) +.*? +[MF] ([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) + ([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/', $res, $matches); 

所有我得到的是一个空数组返回。

+0

你想匹配什么? – 2010-09-11 22:37:16

+0

顺便说一句,Rubular使用Ruby的正则表达式引擎,它与PHP使用的[PCRE](http://ca3.php.net/manual/en/intro.pcre.php)不同。 – 2010-09-11 22:37:33

+0

啊......那么,这是有道理的。你知道我需要转换来完成这项工作吗? – Jim 2010-09-11 22:39:11

回答

1

问题是,您已经在正则表达式中添加了两个额外的空格,这些空格不应该在那里,导致匹配失败。

 
/^!!([0-9]{5}) +.*? +[MF] ([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) + ([A-Z])... 
         ^          ^
         here          and here 

在正则表达式中,空格是重要的(默认情况下)。正则表达式中的空格与目标字符串中的空格匹配。删除这两个空格解决了这个问题。

看到它的工作ideone(这次它是一个PHP示例)。

 
array(10) { 
    [0]=> 
    string(39) "!!92519 C 01 M600200BLNBRN D55420090205" 
    [1]=> 
    string(5) "92519" 
    [2]=> 
    string(3) "600" 
    [3]=> 
    string(3) "200" 
    [4]=> 
    string(3) "BLN" 
    [5]=> 
    string(3) "BRN" 
    [6]=> 
    string(1) "D" 
    [7]=> 
    string(4) "2009" 
    [8]=> 
    string(2) "02" 
    [9]=> 
    string(2) "05" 
} 
+0

马克,谢谢!它现在工作。你能推荐一个好的起始资源来学习正则表达式吗?我真的很喜欢表情。 – Jim 2010-09-11 22:47:09

+1

@Jim查看http://regular-expressions.info上的教程部分 – 2010-09-11 22:47:54

+0

谢谢丹尼尔!你们很棒。没有你们,我永远无法在合理的时间内做到这一点。 – Jim 2010-09-11 22:49:23