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 遍历XP文件夹下所有文件
Nov 27 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
详解PHP中的状态模式编程
Aug 11 PHP
PHP代码优化技巧小结
Sep 29 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
php实现每日签到功能
Nov 29 PHP
关于php开启错误提示的总结
Sep 24 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Django的性能优化实现解析
2019/07/30 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
小学生期末自我鉴定
2014/01/19 职场文书
合作意向书范本
2019/04/17 职场文书
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL