我有一个以下正则表达式来验证北美数字。它工作正常,但我有小问题。 这是我的代码&正则表达式:
$re = '/^\+(1)(((?!900)(?!976)[2-9][0-9]{2})((?!555)[2-9](?!11)[0-9]{2})[0-9]{4}$|\\\\+18([0,3-8])3((?!555)[2-9][0-9]{2})[0-9]{4})$/';
$str = '+18009876543';
preg_match($re, $str, $matches);
print_r($matches);
它返回总共4场比赛,但我只想要3场即完全比赛,group1(它将包含国家代码)&第2组(10位数的电话号码)。
这就是我得到的:
Array ( [0] => +18009876543 [1] => 1 [2] => 8009876543 [3] => 800 [4] => 987 )
但我想要这个:
Array ( [0] => +18009876543 [1] => 1 [2] => 8009876543 )
答案 0 :(得分:0)
/^\+(?:1)((?:(?!900)(?!976)[2-9][0-9]{2})(?:(?!555)[2-9](?!11)[0-9]{2})[0-9]{4})$|\\\\+18(?:[0,3-8])3(?:(?!555)[2-9][0-9]{2})[0-9]{4}$/
在PHP中:
<?php
$re = '/^\+(?:1)((?:(?!900)(?!976)[2-9][0-9]{2})(?:(?!555)[2-9](?!11)[0-9]{2})[0-9]{4})$|\\\\+18(?:[0,3-8])3(?:(?!555)[2-9][0-9]{2})[0-9]{4}$/';
$str = '+18009876543';
preg_match($re, $str, $matches);
print_r($matches);
我使用?:
制作了一些非捕获组以实现此目的: