贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。
那么,我们实用一下
使用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
相关推荐
在使用 `preg_match` 等函数时,可以设置 `error_reporting(E_ALL)` 来开启错误报告,以获取关于正则表达式的错误信息。 总结起来,PHP正则表达式是一种强大的文本处理工具,它可以帮助开发者高效地进行字符串的...
4. **使用预编译的正则表达式**:使用`preg_quote`函数转义用户输入,并结合`preg_match_all`或`preg_replace_callback`等更安全的函数。 5. **代码审计**:定期审查代码,确保所有使用`preg_match`的地方都遵循...
`preg_match_all`函数是PHP中用于全局正则表达式匹配的关键函数,它可以在一个字符串中查找所有符合特定模式的匹配项,并将这些匹配项存储在一个数组中。下面我们将详细讨论`preg_match_all`函数的使用、参数以及...
- PHP中的正则函数:`preg_match()`用于查找匹配,`preg_match_all()`用于查找所有匹配,`preg_replace()`用于替换匹配,`preg_split()`用于根据正则表达式分割字符串。 2. **正则表达式修饰符** - i:使匹配对大...
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配字符串模式,广泛应用于搜索、替换、数据提取等场景。本文档旨在帮助读者理解和掌握正则表达式的基本概念、语法以及常见用途。 ...
1. 左到右匹配:正则引擎从字符串的开头开始,尝试匹配正则表达式的模式。 2. 非贪婪匹配与贪婪匹配:默认情况下,量词是贪婪的,尽可能多地匹配字符。使用 `?` 可以让量词变得非贪婪,匹配尽可能少的字符。 3. 后向...
`preg_match_all` 是PHP中的一个正则表达式匹配函数,它可以找到所有匹配指定模式的字符串,并返回一个数组。在这个例子中,它的任务是找出所有`<img>`标签,并提取出`src`属性的值。使用的正则表达式是: ```regex...
- `$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进行全局正则表达式匹配进行介绍,涵盖函数的基本语法、使用技巧、不同flags的含义以及一些实用的例子。 ...
- `preg_match_all`:与`preg_match`类似,但会返回所有匹配的数组。 - `preg_replace`:替换匹配到的模式,可以指定替换的字符串或回调函数。 - `preg_replace_callback`:与`preg_replace`类似,但使用回调函数来...
3. **使用预编译模式**:使用`preg_match_all()`或`preg_replace_all()`等不涉及回调函数的函数,如果可能的话,这可能更高效。 4. **升级代码库**:如果ECMall有更新的版本,确保已升级到最新,因为开发者可能已经...
正则表达式,全称Regular Expression,是一种模式匹配语言,用于在文本中查找、替换或提取符合特定模式的字符串。它在IT行业中被广泛应用,包括数据验证、文本搜索与替换、网页爬虫等多个领域。本手册(CHM格式)...
- **函数**:PHP提供了多种与正则相关的函数,如`preg_match()`用于单次匹配,`preg_match_all()`用于匹配所有实例,`preg_replace()`进行替换操作,`preg_split()`用于根据模式分割字符串。 - **模式修饰符**:`i...
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于在字符串中查找、替换或提取符合特定模式的文本。在PHP中,正则表达式被广泛应用于数据验证、文本搜索与替换等场景。本教程...
- **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. **后向引用**:...
- `preg_match_all()`:执行全局匹配,返回所有匹配的结果。 - `preg_replace()`:执行替换操作。 - `preg_quote()`:转义正则表达式中的特殊字符。 - `preg_grep()`:根据正则表达式过滤数组元素。 11. **错误...