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来自动调用不同服务器上的flash
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
如何用php获取程序执行的时间
Jun 09 PHP
分享php邮件管理器源码
Jan 06 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP文件上传处理案例分析
Oct 15 PHP
php实现微信企业转账功能
Oct 02 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
Sep 25 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--用万网的接口实现域名查询功能
2012/12/13 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
javascript tips提示框组件实现代码
2010/11/19 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
python之Character string(实例讲解)
2017/09/25 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python3+PyQt5实现柱状图
2018/04/24 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python 追踪except信息方式
2020/04/25 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
谈谈python垃圾回收机制
2020/09/27 Python
Django URL参数Template反向解析
2020/11/24 Python
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
三好学生自我鉴定
2013/12/17 职场文书
培训督导岗位职责
2015/04/10 职场文书
小学安全教育主题班会
2015/08/12 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby