preg_match_all使用心得分享


Posted in PHP onJanuary 31, 2014

preg_match_all — 进行全局正则表达式匹配

说明

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。
搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。

特别注意PREG_PATTERN_ORDER 和PREG_SET_ORDER

flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):

如果使用PREG_PATTERN_ORDER

对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。(即$matches[0] [0]为全部模式匹配中的每一项,$matches[0] [1]为全部模式匹配中的第二项,$matches[1] [0]为匹配每一个括号中的第一项,$matches[1] [0]为匹配每一个括号中的第二项)

<?php 
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);print $out[0][0].", ".$out[0][1]."\n"; 
print $out[1][0].", ".$out[1][1]."\n"; 
?> 

本例将输出:

<b>example: </b>, <div align=left>this is a test</div> 
example: , this is a test

因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。
如果使用PREG_SET_ORDER

对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。(即$matches[0] [0]为第一组匹配项中完整匹配的字符串,$matches[0] [1]为第一组匹配中完整匹配第一个括号中的字符串)

<?php 
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n"; 
print $out[1][0].", ".$out[1][1]."\n"; 
?>

本例将输出:

<b>example: </b>, example: 
<div align=left>this is a test</div>, this is a test

本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。

PREG_OFFSET_CAPTURE

如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。

例子 1. 从某文本中取得所有的电话号码

<?php 
preg_match_all ("/\(? (\d)? \)? (?(1) [\-\s] ) \d-\d/x","Call 555-1212 or 1-800-555-1212", $phones); 
?> 

例子 2. 搜索匹配的 HTML 标记(greedy)

<?php
// \\2 是一个逆向引用的例子,其在 PCRE 中的含义是
// 必须匹配正则表达式本身中第二组括号内的内容,本例中
// 就是 ([\w]+)。因为字符串在双引号中,所以需要
// 多加一个反斜线。
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."\n";
echo "part 1: ".$matches[1][$i]."\n";
echo "part 2: ".$matches[3][$i]."\n";
echo "part 3: ".$matches[4][$i]."\n\n";
}
?> 

本例将输出:

matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: click me
part 3: </a>
PHP 相关文章推荐
php获取数组长度的方法(有实例)
Oct 27 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
PHP中COOKIES使用示例
Jul 26 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 #PHP
php curl_init函数用法
Jan 31 #PHP
curl实现站外采集的方法和技巧
Jan 31 #PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 #PHP
php使用百度翻译api示例分享
Jan 31 #PHP
php比较两个绝对时间的大小
Jan 31 #PHP
2014过年倒计时示例
Jan 31 #PHP
You might like
判断PHP数组是否为空的代码
2011/09/08 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
为jQuery增加join方法的实现代码
2010/11/28 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
python生成随机红包的实例写法
2019/09/02 Python
python处理写入数据代码讲解
2020/10/22 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
教师开学感言
2014/02/14 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2014年统计工作总结
2014/11/21 职场文书
婚礼答谢礼品
2015/01/20 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python