4.7. 贪恋型与懒惰型匹配

未匹配的标注
贪婪型量词 懒惰型量词
* *?
+ +?
{n,} {n,}?

下面我们来匹配两个 div 标签中的文本来做例子

1、贪婪型

<?php

//字符串
$str = '<div>1</div> <span>2</span> <div>3</div>';

//正则表达式
$regular = '/<div>.*<\/div>/';

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

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

输出结果

Array
(
    [0] => Array
        (
            [0] => 
1
 2 
3

        )

)

从结果可以看出,我们把 <sapn>2</span> 的结果也匹配起来了,这就是贪婪模式,尽可能的去多匹配。

但我们只需要匹配 div 中的内容,所以就需要用到下面的懒惰模式了

2、懒惰型

<?php

//字符串
$str = '<div>1</div> <span>2</span> <div>3</div>';

//正则表达式
$regular = '/<div>.*?<\/div>/';

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

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

输出结果

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

            [1] => 
3

        )

)

使用懒惰型匹配结果后,可以看出,只匹配了 div 之间的内容,没有再匹配 span 的内容了。这就是懒惰模式,它会尽可能的少匹配

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

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~