cre*_*hea 3 php regex preg-match
我正在使用PHP版本5.4.45.我在php版本7中测试此代码并且工作正常但在5.4.45版本中无效
$string = '9301234567';
if( preg_match('/^\9\d{9}/', $string) )
{
$string = '0+1'.$string ;
return $string ;
}
Run Code Online (Sandbox Code Playgroud)
在v7返回:
0+19301234567
Run Code Online (Sandbox Code Playgroud)
但是在v5.4.45中返回(preg_match返回false)
9301234567
Run Code Online (Sandbox Code Playgroud)
我怎么能preg_match('/^\9\d{9}/', $string) 在php v5.4.45中使用?谢谢
你的模式是/^\9\d{9}/.请注意,那里有一个\9.这通常被解释为反向引用(这是您早期版本的PHP中发生的事情).我想解释器现在更聪明,并且意识到你的子模式\9不存在,所以它将它理解为文字9.
我深入研究了这种行为的变化,在PHP 5.5.10中,他们将PCRE升级到版本8.34.查看PCRE的更改日志,现在,我发现PCRE版本8.34引入了以下更改:
- Perl已经改变了对\ 8和\ 9的处理.如果之前没有遇到这些数字的捕获组,则将它们视为文字字符8和9,而不是二进制零,后跟文字.PCRE现在也是如此.
请改用此正则表达式.
/^9\d{9}/
Run Code Online (Sandbox Code Playgroud)
<?php
$string = '9301234567';
if( preg_match('/^9\d{9}/', $string) )
{
$string = '0+1'.$string ;
print $string ;
}
Run Code Online (Sandbox Code Playgroud)