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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
Php做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
PHP代码优化的53个细节
Mar 03 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
PHP join()函数用法与实例讲解
Mar 11 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
十大使用PHP框架的理由
2015/09/26 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
javascript实现动态标签云
2015/10/16 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
微信跳一跳辅助python代码实现
2018/01/05 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
Python版中国省市经纬度
2020/02/11 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
培训自我鉴定
2014/01/31 职场文书
小学数学课后反思
2014/04/23 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
安全宣传标语口号
2014/06/06 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
优秀教师申报材料
2014/12/16 职场文书
个人催款函范文
2015/06/23 职场文书