php 5.3.6打破了我的正则表达式模式

时间:2011-08-02 08:15:23

标签: php regex

当我正在处理的网站被移植到使用较新版本的PHP的另一台服务器时,发生了奇怪的事情。在其他3台服务器上正常工作的正则表达式拒绝工作,一直返回0 这是原始的正则表达式:

/\A(?P<text>[[:alpha:]]{4})[[:space:]](?P<password>[\p{L}\p{N}]{3,})[[:space:]](?P<digit1>[[:digit:]]{2,4})[[:space:]](?P<digit2>[[:digit:]]{1,2})\z/u

密码必须是unicode,才刚刚[[:alnum:]],但客户端存在一些问题。
这些是我试图无济于事的:

/\A(?<text>[[:alpha:]]{4}) (?<password>[[:alnum:]]{3,}) (?<digit1>[[:digit:]]{2,4}) (?<digit2>[[:digit:]]{1,2})\z/u
/\A(?<text>[\p{L}]{4}) (?<password>[\p{L}\p{N}]{3,}) (?<digit1>\d{2,4}) (?<digit2>\d{1,2})\z/u

示例文字:ABCD 1a2b3c 100 50

所有这些都在http://www.spaweditor.com/scripts/regex/index.php上进行了测试并且运行良好。

谁能告诉我它有什么问题?我知道它可能不是你见过的最漂亮的正则表达式,但它可以正常工作(或至少工作到现在)。现在我责怪PHP(笑)。

编辑:测试了这些网站上的最后一个模式:
* http://regex.larsolavtorvik.com/
* http://www.spaweditor.com/scripts/regex/index.php
* http://www.pagecolumn.com/tool/pregtest.htm
* http://lumadis.be/regex/test_regex.php
在其他一些允许我自己完全填写正则表达式的地方,用斜杠和u标志。 在所有这些网站中它都有效,但在其他一些网站上我检查过它没有,与我的服务器相同。

PCRE启用了unicode ...

编辑:似乎sysadmins毕竟改变了一些东西......直到10分钟才开始工作:/有人关闭了这个问题,现在所有的正则表达式都有效。

1 个答案:

答案 0 :(得分:4)

您应该检查您的PCRE扩展版本(phpinfo() - &gt; PCRE库版本)。一些服务器具有&lt; 8,版本&gt; = 8仅支持unicode。

Here是如何使用PHP 5.2修复CentOS上的问题的一个很好的例子,您也可以使用PHP 5.3进行检查。