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生成xml简单实例代码
Dec 16 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP封装的非对称加密RSA算法示例
May 28 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 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处理restful请求的路由类分享
2014/02/27 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
代码整洁之道(重构)
2018/10/25 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
python控制台显示时钟的示例
2014/02/24 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
python中import与from方法总结(推荐)
2019/03/21 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
英国袜子店:Sock Shop
2017/01/11 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
同学会演讲稿
2019/04/02 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
Python序列化模块JSON与Pickle
2022/06/05 Python