`
Yoper
  • 浏览: 7195 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

preg_match_all 正则表达式贪婪与非贪婪模式

阅读更多

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。

 

那么,我们实用一下

使用php 的行数preg_match_all

以下我们要将字符串content 中的两个链接取出来

 

 

<?php
$content='<a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-1.html">BD</a><a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-0.html">DVD</a>b';
$play_pattern = '/<a  target=\"_blank\" href=\"(.*)\">(.*)<\/a>/i';
preg_match_all($play_pattern, $content, $play_list);
print_r($play_list);


我们得到的结果是

Array
(
[0] => Array
(
[0] => <a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-1.html">BD</a><a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-0.html">DVD</a>
)


[1] => Array
(
[0] => /videos/68759vod-play-id-68759-sid-0-pid-1.html">BD</a><a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-0.html
)


[2] => Array
(
[0] => DVD
)


)

 

这显然不是我们想要的。

那么,我么么只要把$play_pattern加多一个字母,就能匹配到我们所需要的信息

 

$play_pattern = '/<a  target=\"_blank\" href=\"(.*)\">(.*)<\/a>/iU';

 

结果就是

Array
(
[0] => Array
(
[0] => <a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-1.html">BD</a>
[1] => <a target="_blank" href="/videos/68759vod-play-id-68759-sid-0-pid-0.html">DVD</a>
)


[1] => Array
(
[0] => /videos/68759vod-play-id-68759-sid-0-pid-1.html
[1] => /videos/68759vod-play-id-68759-sid-0-pid-0.html
)


[2] => Array
(
[0] => BD
[1] => DVD
)


)

 

贪婪模式和非贪婪模式差别就是那么大。

在正则html上的列表的时候,经常就会出现这样的错误。使用preg_match_all正则匹配到了整个字符串,但是子串的匹配被忽略了。导致结果错误。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Yoper

chen.yong.peng@foxmail.com

2016.08.01

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

网址导航

 

分享到:
评论

相关推荐

    PHP正则表达式快速学习及PHP常用正则表达式大全实用文档.doc

    在使用 `preg_match` 等函数时,可以设置 `error_reporting(E_ALL)` 来开启错误报告,以获取关于正则表达式的错误信息。 总结起来,PHP正则表达式是一种强大的文本处理工具,它可以帮助开发者高效地进行字符串的...

    preg-match绕过-01-第九天知识点回顾.ev4.rar

    4. **使用预编译的正则表达式**:使用`preg_quote`函数转义用户输入,并结合`preg_match_all`或`preg_replace_callback`等更安全的函数。 5. **代码审计**:定期审查代码,确保所有使用`preg_match`的地方都遵循...

    php中使用preg_match_all匹配文章中的图片

    `preg_match_all`函数是PHP中用于全局正则表达式匹配的关键函数,它可以在一个字符串中查找所有符合特定模式的匹配项,并将这些匹配项存储在一个数组中。下面我们将详细讨论`preg_match_all`函数的使用、参数以及...

    PHP 常用的正则表达式例子

    - PHP中的正则函数:`preg_match()`用于查找匹配,`preg_match_all()`用于查找所有匹配,`preg_replace()`用于替换匹配,`preg_split()`用于根据正则表达式分割字符串。 2. **正则表达式修饰符** - i:使匹配对大...

    正则表达式帮助文档 一点正则表达式的文档 随便看看

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配字符串模式,广泛应用于搜索、替换、数据提取等场景。本文档旨在帮助读者理解和掌握正则表达式的基本概念、语法以及常见用途。 ...

    正则表达式系统教程【CHM手册】

    1. 左到右匹配:正则引擎从字符串的开头开始,尝试匹配正则表达式的模式。 2. 非贪婪匹配与贪婪匹配:默认情况下,量词是贪婪的,尽可能多地匹配字符。使用 `?` 可以让量词变得非贪婪,匹配尽可能少的字符。 3. 后向...

    php preg_match_all结合str_replace替换内容中所有img

    `preg_match_all` 是PHP中的一个正则表达式匹配函数,它可以找到所有匹配指定模式的字符串,并返回一个数组。在这个例子中,它的任务是找出所有`&lt;img&gt;`标签,并提取出`src`属性的值。使用的正则表达式是: ```regex...

    PHP用正则表达式过滤超链接

    - `$pat`:存储正则表达式模式。 2. **正则匹配**: - 使用`preg_match_all()`函数执行正则匹配。该函数返回所有匹配的结果,并将结果保存到数组`$m`中。 3. **输出结果**: - 第一个`print_r($m[2])`输出的是...

    正则表达式,掌握正则表达式

    - **函数接口**:PHP提供了多种与正则相关的函数,如`preg_match()`用于单次匹配,`preg_match_all()`用于全局匹配,`preg_replace()`用于替换,`preg_split()`用于分割字符串。 - **正则修饰符**:如`i`忽略大小...

    preg_match_all使用心得分享

    preg_match_all函数用于在字符串中搜索所有匹配正则表达式模式的子串。本文将围绕如何使用preg_match_all进行全局正则表达式匹配进行介绍,涵盖函数的基本语法、使用技巧、不同flags的含义以及一些实用的例子。 ...

    php正则表达式

    - `preg_match_all`:与`preg_match`类似,但会返回所有匹配的数组。 - `preg_replace`:替换匹配到的模式,可以指定替换的字符串或回调函数。 - `preg_replace_callback`:与`preg_replace`类似,但使用回调函数来...

    ecmall 解决php5.6升级后的所有bug preg_replace_callback()

    3. **使用预编译模式**:使用`preg_match_all()`或`preg_replace_all()`等不涉及回调函数的函数,如果可能的话,这可能更高效。 4. **升级代码库**:如果ECMall有更新的版本,确保已升级到最新,因为开发者可能已经...

    正则表达式(regular expression)手册(CHM)

    正则表达式,全称Regular Expression,是一种模式匹配语言,用于在文本中查找、替换或提取符合特定模式的字符串。它在IT行业中被广泛应用,包括数据验证、文本搜索与替换、网页爬虫等多个领域。本手册(CHM格式)...

    正则表达式系统教程.CHM

    - **函数**:PHP提供了多种与正则相关的函数,如`preg_match()`用于单次匹配,`preg_match_all()`用于匹配所有实例,`preg_replace()`进行替换操作,`preg_split()`用于根据模式分割字符串。 - **模式修饰符**:`i...

    PHP之正则表达式系统教程

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于在字符串中查找、替换或提取符合特定模式的文本。在PHP中,正则表达式被广泛应用于数据验证、文本搜索与替换等场景。本教程...

    正则表达式的api

    - **PHP**:PHP的正则表达式API主要由`preg_match()`、`preg_match_all()`、`preg_replace()`和`preg_split()`等函数组成。 - **C#**:C#中的`System.Text.RegularExpressions`命名空间提供了`Regex`类,包含`...

    正则讲解 正则表达式

    4. **PHP**: PHP中的`preg_match()`、`preg_replace()`等函数用于处理正则表达式。 5. **C#**: C#中的`System.Text.RegularExpressions`命名空间包含了正则表达式支持。 **进阶正则表达式技术** 1. **后向引用**:...

    php正则表达式的基本语法总结共11页.pdf.zip

    - `preg_match_all()`:执行全局匹配,返回所有匹配的结果。 - `preg_replace()`:执行替换操作。 - `preg_quote()`:转义正则表达式中的特殊字符。 - `preg_grep()`:根据正则表达式过滤数组元素。 11. **错误...

Global site tag (gtag.js) - Google Analytics