登录  /  注册

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

黄舟
发布: 2017-11-11 11:25:38
原创
12043人浏览过

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

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

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

实例代码: 

$html = &#39;<p id="biuuu">jb51.net</p><p id="biuuu_2">jb51.net2</p><p id="biuuu_3">jb51.net3</p>&#39;;
登录后复制

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

分析:

字符串是一个基本的HTML元素,每一个p元素对应该一个ID和内容,并且是独立的,首先考虑如何 取出一个p内的ID值和内容,如:jb51.net,然后匹配其它类似的元素。一个p中须要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值(biuuu),第二个表达式用于匹配ID的内容(jb51.net),正则表达式常用的表达式运用小括号,那么前面的元素将会变成如下形式:

<p id="(biuuu)">(jb51.net)</p> 
<p id="(表达式1)">(表达式2)</p>
登录后复制

好,运用如上小括号把须要匹配的区域执行 了划分,接下来就是如何 匹配各个表达式内的内容,我们猜想一个ID可能是字母,数字或下划线,那这就变得基本了,运用中括号就可以实现,如下:

表达式1:

[a-zA-Z0-9_]+ (表示匹配大小写字母,数字和下划线)
登录后复制

那如何 匹配表达式2,因为ID的内容可以是任意的字符,但是要留心,不能匹配<或>字符,因为如果匹配这两个字符将会把后面运用的p都匹配出来,因此须要排除这两个字符开始的元素,也就是不匹配以<或>字符,如下:

表达式2:

[^<>]+ (表示不匹配<和>字符)
登录后复制

这样,须要匹配的子表达式就实现了,但是还要须要匹配一个 的表达式,要领如下:
表达式:/ '\"(表达式1)\"'>(表达式2)<\/p>/
留心其中的双引号"和/须要运用 \转义字符转义,然后把前面两个表达式放进去,
如下:

 &#39;\"([a-z0-9_]+)\"&#39;>/<p id=\"([a-z0-9_]+)\">([^<>]+)<\/p>/
登录后复制

这样就实现一个匹配每一个p元素ID值和内容的正则表达式,然后运用 preg_match_all函数测试如下:

$html = &#39;<p id="biuuu">jb51.net</p><p id="biuuu_2">jb51.net2</p><p id="biuuu_3">jb51.net3</p>&#39;; 
preg_match_all('/([^<>]+)<\/p>/',$html,$result); 
var_dump($result);
登录后复制

结果:

array(3) { 
[0]=> array(3) 
{ [0]=> string(30) "<p id="biuuu">jb51.net</p>" 
  [1]=> string(33) "<p id="biuuu_2">jb51.net2</p>" 
  [2]=> string(33) "<p id="biuuu_3">jb51.net3</p>" 
  } 
[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" 
  } 
  }
登录后复制

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

总结:

看这篇文章和上一篇文章,相信大家对php正则表达式中的这两个函数都有自己的理解和认识,对此希望对你的工作有所帮助!

相关推荐:

php正则表达式中preg_match函数的详解


php正则表达式验证邮箱地址的案例


php正则表达式的实例分析


php正则表达式入门详解

以上就是php正则表达式中preg_match_all函数的详解的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号