9.2. 反向引用条件( false )
语法: (?( 反向引用的序号 ) 如果反向引用为 tur 则要匹配的内容 | 如果反向引用为 false 则要匹配的内容 )
用代码来理解,大概就是表达式为 if
语句中的 else
语句
if($a == 1){$b = 1;}else{$c = 1}
例如:(123)456-7890 和 123-456-7890 都是可以接受的电话号码
而 1234567890、(123)-456-7890虽然都包含正确的数字字符,但是格式是不一样的
下面我们使用反向引用条件才处理这种情况
<?php
//字符串
$str = '
(123)456-7890
123-456-7890
1234567890
(123)-456-7890
';
//正则表达式
$regular = '/(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}/';
//执行匹配正则表达式
preg_match_all($regular, $str, $matches);
//打印结果
echo '<pre>';
print_r($matches);
echo '</pre>';
输出结果
Array
(
[0] => Array
(
[0] => (123)456-7890
[1] => 123-456-7890
)
[1] => Array
(
[0] => (
[1] =>
)
)
( \( )?
检查左括号是否存在
\d{3}(?(1)\)|-)
如果左括号存在,那就输出右括号 \)
,否则就输出 -
\d{3}-\d{4}
最后再匹配后面的数值就可以了
推荐文章: