我有一个下面的正则表达式来验证北美的数字。它工作得很好,但我有个小问题。下面是我的代码& regex:
$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 )发布于 2018-01-18 05:10:06
/^\+(?: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);为了实现这一点,我用?:实现了一些组的非捕获:
https://stackoverflow.com/questions/48309690
复制相似问题