了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明。

preg_match_all函数具体说明大家可以查看PHP手册,本文运用 preg_match_all用于测试正则表达的效果。

实例代码: 

$html = '<div id="biuuu">jb51.net</div><div id="biuuu_2">jb51.net2</div><div id="biuuu_3">jb51.net3</div>';

实例要求:分别将每一个DIV元素的ID和内容取出,如biuuu,biuuu_2,biuuu_3,jb51.net,jb51.net2和jb51.net3(一些常用的抓站要领就是这样匹配的)

分析:字符串是一个基本的HTML元素,每一个DIV元素对应该一个ID和内容,并且是独立的,首先考虑如何 取出一个DIV内的ID值和内容,如:jb51.net,然后匹配其它类似的元素。一个DIV中须要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值(biuuu),第二个表达式用于匹配ID的内容(jb51.net),正则表达式常用的表达式运用小括号,那么前面的元素将会变成如下形式: 
<div id="(biuuu)">(jb51.net)</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">jb51.net</div><div id="biuuu_2">jb51.net2</div><div id="biuuu_3">jb51.net3</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">jb51.net</div>" [1]=> string(33) "<div id="biuuu_2">jb51.net2</div>" [2]=> string(33) "<div id="biuuu_3">jb51.net3</div>" } [1]=> array(3) { [0]=> string(5) "biuuu" [1]=> string(7) "biuuu_2" [2]=> string(7) "biuuu_3" } [2]=> array(3) { [0]=> string(8) "jb51.net" [1]=> string(9) "jb51.net2" [2]=> string(9) "jb51.net3" } }

共有三个表达式,分别显示每一个表达式匹配的值,并以数组的形式存储,这样就把每一个DIV元素的ID和内容取出。运用正则表达式最主要还是要知道须要什么,然后跟椐须要执行 匹配,并且思路清晰,并适当的借助preg_match_all函数执行 输出调试,非常方便。

preg_match_all正则表达式的基本使用的更多相关文章

  1. PHP 正则表达式抓取网页内容。

    我想用php抓取爱奇艺生活类型视频网页里面的元素,应该如何去做呢? 首先我要非常熟悉正则表达式,关于正则表达式的学习,我会写一篇博客一直学习的. 直接举例子: 这是一个爱奇艺生活视频的界面的网址 $u ...

  2. DedeCMS 列表页调用图集内容多张图片的方法

    新做一个以图片为主的网站,采用的DEDECMS图集,列表页要求直接调内容面的大图,解决方法如下:(主要是采用php的正则匹配函数preg_match_all函数来巩固复习下该函数:preg_match ...

  3. php 函数preg_match、preg_match_all ,以及正则表达式规则

    <?php $str = 'php is the best language phhhhp is'; $part = '/ph{1,}p/'; echo preg_match($part, $s ...

  4. PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

    --http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的 ...

  5. PHP 正则表达式匹配函数 preg_match 与 preg_match_all

    preg_match() preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 . 语法: 1 int preg_match( string pattern, strin ...

  6. PHP 正则表达式的简单应用以 preg_match_all 抓取HTML元素为例 [转载]

    PHP 正则表达式的简单应用以 preg_match_all 抓取HTML元素为例 2011-12-02 17:09:39|  分类: PHP|举报|字号 订阅     下载LOFTER我的照片书   ...

  7. php正则表达式中preg_match_all函数的详解

    php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则 ...

  8. 正则表达式,匹配查找函数(preg_match_all)flags参数对比

    格式: int preg_match_all ( string pattern, string subject, array matches [, int flags] ) 参数 flags 选项有以 ...

  9. PHP下用正则表达式分割preg_split、替换reg_replace、匹配preg_match_all等出现乱码的解决方法

    操作前声明操作字符的编码: mb_regex_encoding('utf-8'); $arr = preg_split('/[\n,]/u',$data['name'] ,0, PREG_SPLIT_ ...

随机推荐

  1. QT自定义精美换肤界面

    陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数次,一直搜索QT相关的换 ...

  2. [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)

    上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...

  3. 支持事件穿透?使用pointer-events样式

    使用绝对定位元素,让元素A完全盖住元素B时,如何通过元素A来响应元素B的事件呢? 上图可以用下面的SVG代码来实现: <svg width="200" height=&quo ...

  4. 2-MSP430按键输入检测

    为了写一篇文章做铺垫--提醒着自己,,,,,, P1.0的电平,随着P1.1引脚输入的电平变化而变化 #include "io430.h" void delay(void) { u ...

  5. 【Android Studio】Android Studio 安装及设置

    版权所有, 禁止转载, 如有需要, 请站内联系. 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20845807 时间: 2014 ...

  6. Atitit 三论”(系统论、控制论、信息论

    Atitit 三论"(系统论.控制论.信息论 1. 系统论的创始人是美籍奥地利生物学家贝塔朗菲1 2. 信息论是由美国数学家香农创立的,2 3. 什么是控制论? 2 1. 系统论的创始人是美 ...

  7. ooj 1066 青蛙过河DP

    http://121.249.217.157/JudgeOnline/problem.php?id=1066 1066: 青蛙过河 时间限制: 1 Sec  内存限制: 64 MB提交: 58  解决 ...

  8. photoshop 快速切图

    发现一个详细好方法:http://blog.csdn.net/zhangxiaowei_/article/details/42143307 具体如下:

  9. C#中Math.Round()实现中国式四舍五入

    C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都 ...

  10. 【地图API】收货地址详解2

    上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...