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动态生成VRML网页
Oct 09 PHP
模板引擎Smarty深入浅出介绍
Dec 06 PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 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
德劲1103的维修打理经验
2021/03/02 无线电
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
python非递归全排列实现方法
2017/04/10 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
django最快程序开发流程详解
2019/07/19 Python
tensorflow 模型权重导出实例
2020/01/24 Python
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
购房协议书范本
2014/04/11 职场文书
超市活动计划书
2014/04/24 职场文书
2014中考励志标语
2014/06/05 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
党员先进事迹材料
2014/12/19 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
2015年林业工作总结
2015/05/14 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书