请友人帮忙分析一下这个PHP正则语法:

$str="111-999-444 abckdeddd-900-890hdkkdlld";
$preg='/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/si';
//$preg="/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/si";@
preg_match_all($preg,$str,$arr);
echo '<pre>';print_r($arr);echo '</pre>';
在正则里面@式,为啥用双引号就不能匹配了呢?请帮我讲一下这里双引号与单引号的区别?

正则平时正规的用法就用单引号就行了。
其实单双引号的区别是跟正则无关的。主要是php自己对双引号的先解析一次,接着再轮到正则去解析。
就是你用双引号的时候,需要把所有的\都变成\\ 才可以。就是双引号的基本用法啦。
\接一个3位的数字这3位的数字是当8进制解析的,是会解析成这个数字对应的ascii码的,'\141' 代表字符常量 'a'。(\xhh是十六进制, '\x41' 代表字符常量 'A')你这里的\1,\2都被替换成ascii码了。再被正则去解析,当然解析不出来啦。
温馨提示:答案为网友推荐,仅供参考
相似回答