我有一个正则表达式,用于捕获字符串中的电话号码:
[1.-][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}[\s]?(.[or]?.[1.-][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}[\s])?
除了捕获字符串中的标准电话号码(例如1-222-3333
)之外,此表达式还需要匹配1-800-0000 or 1-234-5678
之类的字符串。 It seemingly works as intended
然而,PHP的preg_match
功能似乎只与初始电话号码匹配,一旦发现忽略了模式的可选or
部分
$matches = array();
$string = '1-208-687-4348 or 1-509-892-5779';
preg_match('/[1.-][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}[\s]?(.[or]?.[1.-][\s.-]\d{3}[\s.-]\d{3}[\s.-]\d{4}[\s])?/', $string, $matches);
print_r($matches); // matches[0] => 1-208-687-4348
我的正则表达式遗漏了什么?我是否必须为捕获组指定优先顺序?