我使用的是PHP5.4.45版本。
我在php version 7中测试了这段代码,结果是真的,但在version 5.4.45中不起作用
$string = '9301234567';
if( preg_match('/^\9\d{9}/', $string) )
{
$string = '0+1'.$string ;
return $string ;
}
在V7返回中:
0+19301234567
但在v5.4.45中返回(preg_match return false)
9301234567
如何在PHP V5.4.45中使用
preg_match('/^\9\d{9}/', $string)
?谢谢
最佳答案
简短的
你的模式是/^\9\d{9}/
。注意里面有一个\9
。这通常被解释为一个backreference(这是在早期版本的php中发生的事情)。我想解释器现在更聪明了,它意识到你的子模式\9
不存在,所以它把它理解为一个文本9
。
编辑-研究
我更深入地研究了这种行为和PHP 5.5.10 they upgraded PCRE to version 8.34的变化。现在,通过查看changelogs for PCRE,我发现pcre的8.34版本引入了以下更改:
Perl已经更改了对\8和\9的处理。如果以前没有
遇到捕获这些数字的组时,它们被视为
文字字符8和9,而不是二进制零后跟
文字。PCRE现在也这样做了。
代码
改用这个正则表达式。
/^9\d{9}/
用法
See code in use here
<?php
$string = '9301234567';
if( preg_match('/^9\d{9}/', $string) )
{
$string = '0+1'.$string ;
print $string ;
}
关于php - preg_match模式在php v5中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47890301/