6.1. 使用子表达式进行分组

未匹配的标注

子表达式使用元字符 () 来定义

假设有以下字符串

abc;abc;abc;

如果按照之前的写法我们会写表达式为 [abc]{3} 但是这样是不行的,这样写 {3} 只能匹配3次单个字符

匹配结果如下:

aaa bbb ccc

可以看出匹配出来的内容不是我们想要的,所以我们需要用到子表达式来处理这个问题!!!


[abc]{3} 修改成 (abc;){3},就可以完整字符串中的内容了

匹配结果如下:

abc;abc;abc;

理解:子表达式相当于匹配 ( ) 中的内容,而不是像之前的 [ ] 只能匹配单个字符了

1、匹配多个  

<?php

//字符串
$str = '<p>&nbsp; &nbsp; &nbsp;</p>';

//正则表达式
$regular = '/(&nbsp;){2,}/';

//执行匹配正则表达式
preg_match_all($regular, $str, $matches);

//打印结果
echo '<pre>';
print_r($matches);
echo '</pre>';

输出结果

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)

2、匹配 IP地址

<?php

//字符串
$str = '192.168.0.1';

//正则表达式
$regular = '/(\d{1,3}\.){3}\d{1,3}/';

//执行匹配正则表达式
preg_match_all($regular, $str, $matches);

//打印结果
echo '<pre>';
print_r($matches);
echo '</pre>';

输出结果

Array
(
    [0] => Array
        (
            [0] => 192.168.0.1
        )

    [1] => Array
        (
            [0] => 0.
        )

)

3、匹配年份

<?php

//字符串
$str = '2022-08-02  1911-08-02';

//正则表达式
$regular = '/(20|19)\d{2}/';

//执行匹配正则表达式
preg_match_all($regular, $str, $matches);

//打印结果
echo '<pre>';
print_r($matches);
echo '</pre>';

输出结果

Array
(
    [0] => Array
        (
            [0] => 2022
            [1] => 1911
        )

    [1] => Array
        (
            [0] => 20
            [1] => 19
        )

)

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

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


暂无话题~