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加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
PHP实现下载功能的代码
Sep 29 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
php数组查找函数总结
Nov 18 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 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从数据库查询结果生成树形列表的方法
2015/04/17 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
交通事故检查书范文
2014/01/30 职场文书
网站推广策划方案
2014/06/04 职场文书
旅游文化节策划方案
2014/06/06 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS