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动态分页函数,PHP开发分页必备啦
Nov 07 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
php数组(array)输出的三种形式详解
Jun 05 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
微信支付扫码支付php版
Jul 22 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
wxpython实现图书管理系统
2018/03/12 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
武汉瑞得软件笔试题
2015/10/27 面试题
财务人员求职自荐书范文
2014/02/10 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
白酒代理协议书范本
2014/10/26 职场文书
表扬通报怎么写
2015/01/16 职场文书
资料员岗位职责
2015/02/10 职场文书
辞职信标准格式
2015/02/27 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书