PHP函数preg_match_all正则表达式的基本使用详细解析


Posted in PHP onAugust 31, 2013

了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明。

preg_match_all函数具体说明大家可以查看PHP手册,本文运用 preg_match_all用于测试正则表达的效果。

实例代码:

$html = '<div id="biuuu">3water.com</div><div id="biuuu_2">3water.com2</div><div id="biuuu_3">3water.com3</div>';

实例要求:分别将每一个DIV元素的ID和内容取出,如biuuu,biuuu_2,biuuu_3,3water.com,3water.com2和3water.com3(一些常用的抓站要领就是这样匹配的)

分析:字符串是一个基本的HTML元素,每一个DIV元素对应该一个ID和内容,并且是独立的,首先考虑如何 取出一个DIV内的ID值和内容,如:3water.com,然后匹配其它类似的元素。一个DIV中须要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值(biuuu),第二个表达式用于匹配ID的内容(3water.com),正则表达式常用的表达式运用小括号,那么前面的元素将会变成如下形式:
<div id="(biuuu)">(3water.com)</div>
<div id="(表达式1)">(表达式2)</div>

好,运用如上小括号把须要匹配的区域执行 了划分,接下来就是如何 匹配各个表达式内的内容,我们猜想一个ID可能是字母,数字或下划线,那这就变得基本了,运用中括号就可以实现,如下:

表达式1:[a-zA-Z0-9_]+ (表示匹配大小写字母,数字和下划线)
那如何 匹配表达式2,因为ID的内容可以是任意的字符,但是要留心,不能匹配<或>字符,因为如果匹配这两个字符将会把后面运用的DIV都匹配出来,因此须要排除这两个字符开始的元素,也就是不匹配以<或>字符,如下:

表达式2:[^<>]+ (表示不匹配<和>字符)
这样,须要匹配的子表达式就实现了,但是还要须要匹配一个 的表达式,要领如下:
表达式:/ '\"(表达式1)\"'>(表达式2)<\/div>/
留心其中的双引号"和/须要运用 \转义字符转义,然后把前面两个表达式放进去,
如下: '\"([a-z0-9_]+)\"'>/<div id=\"([a-z0-9_]+)\">([^<>]+)<\/div>/   

这样就实现一个匹配每一个DIV元素ID值和内容的正则表达式,然后运用 preg_match_all函数测试如下:

$html = '<div id="biuuu">3water.com</div><div id="biuuu_2">3water.com2</div><div id="biuuu_3">3water.com3</div>'; 
preg_match_all('/<div\sid=\"([a-z0-9_]+)\">([^<>]+)<\/div>/',$html,$result); 
var_dump($result);

结果:
array(3) { [0]=> array(3) 
{ [0]=> string(30) "<div id="biuuu">3water.com</div>" [1]=> string(33) "<div id="biuuu_2">3water.com2</div>" [2]=> string(33) "<div id="biuuu_3">3water.com3</div>" } [1]=> array(3) { [0]=> string(5) "biuuu" [1]=> string(7) "biuuu_2" [2]=> string(7) "biuuu_3" } [2]=> array(3) { [0]=> string(8) "3water.com" [1]=> string(9) "3water.com2" [2]=> string(9) "3water.com3" } }

共有三个表达式,分别显示每一个表达式匹配的值,并以数组的形式存储,这样就把每一个DIV元素的ID和内容取出。运用正则表达式最主要还是要知道须要什么,然后跟椐须要执行 匹配,并且思路清晰,并适当的借助preg_match_all函数执行 输出调试,非常方便。
PHP 相关文章推荐
一个PHP数组应该有多大的分析
Jul 30 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php实现数组重复数字统计实例
Sep 30 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
显示程序执行时间php函数代码
Aug 29 #PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 #PHP
phpmyadmin config.inc.php配置示例
Aug 27 #PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 #PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 #PHP
php读取excel文件的简单实例
Aug 26 #PHP
PHP中判断变量为空的几种方法分享
Aug 26 #PHP
You might like
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python读取word文本操作详解
2018/01/22 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
python设置中文界面实例方法
2020/10/27 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
python实现简单猜单词游戏
2020/12/24 Python
PHP如何去执行一个SQL语句
2016/03/05 面试题
物流仓管员工作职责
2014/01/06 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
初三班主任寄语大全
2014/04/04 职场文书
课外活动总结范文
2014/07/09 职场文书
上党课的心得体会
2014/09/02 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
Python爬虫基础讲解之请求
2021/05/13 Python
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server