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

标签 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...

编辑:似乎系统管理员毕竟改变了一些东西......直到 10 分钟前才工作:/有人关闭这个问题,所有的正则表达式现在都可以工作。

最佳答案

您应该检查您的 PCRE 扩展版本(phpinfo() -> PCRE 库版本)。部分服务器有<8,版本>=8只支持unicode。

Here是一个很好的例子,说明如何使用 PHP 5.2 在 CentOS 上解决问题,您也可以使用 PHP 5.3 检查它。

关于php 5.3.6 破坏了我的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909057/

相关文章:

regex - 重写 URL 并使新 URL 显示在地址栏中

regex - 用正则表达式解析

php - 如何在php中上传CSV时包含逗号

PHP MySQL 执行多个相关查询的最佳方式

c# - 如何使用正则表达式检查特殊字符

javascript - 正则表达式复杂模式

php - Bash echo-pipe 进入 Mysql shell 失败

php - 将 DIV 转换为输入元素并将数据保存到数据库中

php - 防止 Redis key 逐出策略

php - REQUEST_URI 意外包含 FQDN