php5.3 preg match,preg_match在php> 5.3中失败

我对正则表达式不太满意,所以我甚至不知道这个是什么,确切地说:

echo preg_match('/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}){1,254}$/', 'example12345678.com>');

我从Zend Framework的旧版本中获取了它 – 1.5,这已经过时了,在框架的最后一个稳定版本中,这个正则表达式不再出现了.但是,它的行为很奇怪,因为我在官方php资源中找不到任何文档说明或向后不兼容的注释.

问题是在PHP 5.2.*它工作正常:返回0.在PHP 5.3.10,5.4.0(很可能是5.3.,5.4.我推测)它返回FALSE,意思是“错误”.

我的问题是:为什么?什么是错误?它是正则表达式,某种递归或规则歧义吗?如果是这样,为什么它适用于PHP 5.2?

有趣的是,如果我改变’example12345678.com>’到’example1234567.com>’ (使一个或多个char更短) – 它开始工作并返回0.如果我将其更改为’123123123123123123123123123’它也可以工作并返回1.

UPD:不知道是否重要,但这里的pcre版本是8.02(php 5.2)vs 8.12(php 5.3)

UPD2:我确实理解它的用途……或多或少……现在让任何工作都没有问题.正如我所说 – Zend_Validate_ *更新解决了它.我会用其他的话来描述我的担忧:

比方说,我升级了一个重要的软件,制作php5.2> php5.3开关.我试图找到我可能遇到的所有问题的信息(主要是通过阅读:http://php.net/manual/en/migration53.php).该软件有点陈旧,但它并不古老,例如Zend Framework可能是1.5版本.我检查/修补/分析并修复每个bc中断和不推荐使用的功能.甚至我的单元测试运行正常.

令我惊讶的是,问题中描述了什么. (确切地说,Zend_Validate_Hostname会抛出异常).所以现在我想知道为什么我在升级时错过了这个,更重要的是,我是否应该在应用程序中重新检查所有’preg_match'(以及其他PCRE利用函数),尝试各种可想象的输入数据以尝试找到类似的“错误修复” ”.

如果是“错误修复”.因为它看起来像一个新的bug – 它曾经在php5.2中按预期工作,不再起作用了.

希望得到一些线索来缩小搜索范围.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值