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} 最后再匹配后面的数值就可以了

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~