免责声明 :如果没有重置组,我不需要另一个更好的正则表达式。我需要了解为什么 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 only为
PHP < 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/