php - 对分支重置组的反向引用

标签 php regex pcre php-7 php-5.6

免责声明 :如果没有重置组,我不需要另一个更好的正则表达式。我需要了解为什么 PHP 5 的输出不同和 PHP 7 .

问题 :我尝试使用分支重置组来匹配使用 PHP 的字符串它由由不同分隔符分隔的数字组组成。

$string = '12-34-56-78';
$pattern = '/^\d{2}(?|(---)|(-)|(\.)|(\:))\d{2}\1\d{2}\1\d{2}$/';
$matches = preg_match($pattern, $string) === 1;
var_dump($matches);

不幸的是it works onlyPHP < 7 .我还查了libpcre的版本这不是问题的根源。同版本libpcre不同 PHP 返回不同结果版本。

我无法在 PHP 7 中找到任何关于更改内容和原因的引用。 .

问题 :为什么 PHP 5 的输出不同和 PHP 7 ?这是 PHP 7 的预期行为吗? ?

更新 : 好像是 bug .

最佳答案

你确定preg_match返回 0 而不是 FALSE ?

编辑

仍然不知道为什么但反转 (-)(---)解决这个问题 :
/^\d{2}(?|(-)|(---)|(\.)|(\:))\d{2}\1\d{2}\1\d{2}$/
Demo

编辑 2

使用 PHP 7,似乎只有第一个子模式有效。正则表达式也将与以下代码为假:

$string = '12.34.56.78'; 
$string = '12:34:56:78'; 
$string = '12---34---56---78'; 

也许是 PCRE 错误,因为分支重置 Synatx 对我来说似乎是正确的。

关于php - 对分支重置组的反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048863/

相关文章:

html - 需要最佳实践帮助或 RegEx 建议来创建 Image Sprite 映射到 CSS

ruby-on-rails - 如何在 Mac OSX 上安装 PCRE 开发头文件

php - cURL 中的数据二进制参数

javascript - 使用 bootstraptoggle 动态更改切换

python - 用re解析python文件

c# - 如何使用正则表达式 html 将行空白删除为纯文本?

php - 正则表达式反向引用

regex - 与正则表达式反转匹配

php - 如何避免重复的电子邮件 php/sql?

php - 预准备语句中 mysqli select 语句中 LIKE/OR 运算符的问题