Php preg_replace-don';如果$4为空,则不包括字符串

Php preg_replace-don';如果$4为空,则不包括字符串,php,regex,preg-replace,Php,Regex,Preg Replace,我有这样的表达: $regex_phone = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})' .'(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})' .'[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/'; if(!preg_match($regex_phone, $data[

我有这样的表达:

$regex_phone = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})' 
              .'(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})' 
              .'[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/';
if(!preg_match($regex_phone, $data['phone'])){ 
    $error[] = "Please enter a valid phone number."; 
}else{ 
    $data['phone'] = preg_replace($regex_phone, '($1) $2-$3 ext.$4', $data['phone']);
}
$regex\u phone='/^(?:1(?:[.-])?(?:\((?=\d{3}\))?([2-9]\d{2})

.(?:(?我不确定这个花哨的正则表达式是否真的必要
但是让我们看看

啊,我修改了大约4美元的区域,以便
考虑到缺少分机号码。你能发现吗 区别是什么

...
$regex_phone = 
  '/^
     (?:
       1(?:[. -])?
     )?
     (?: 
       \( (?=\d{3} \) ) # possible mistake? (probably correct)
     )?
     ([2-9]\d{2})       # $1
     (?:
       (?<=\(\d{3})\)
     )?
     \s?
     (?:
       (?<=\d{3})
       [.-]
     )?
     ([2-9]\d{2})       # $2
     [.\s-]?
     (\d{4})            # $3
     (?:
       \s? ext [.\s]? 
       (\d{1,5})?       # $4
     )?
 $/ix';

if( preg_match( $regex_phone, $data['phone'], $m) ) { 
   $data['phone'] = "$m[1] $m[2]-$m[3]" . (isset($m[4]) ? " ext.$m[4]" : '');
}
else { 
   $error[] = "Please enter a valid phone number.<br />"; 
}
...
。。。
$regex_电话=
'/^
(?:
1(?:[. -])?
)?
(?: 
\((?=\d{3}\)#可能的错误?(可能正确)
)?
([2-9]\d{2})#$1
(?:

(?甚至没有考虑过获取preg_match变量。工作非常出色。我做了一些修改以适应我的编码风格,但isset()和$m是我所需要的。谢谢rbo