热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP正则表达式实例

这个条件语句来判断开始的标记跟闭合的标记是否相等,不相等就说明没闭合。最后用in_array($start_tags[1][$i],

1 使用正则表达式来检测HTML 是否关闭
代码片段
 

PHP代码
  1. function check_html($html) {   
  2. preg_match_all("/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/",$html,$start_tags);   
  3. preg_match_all("/<\\/([a-zA-Z0-9]+)>/", $html, $end_tags);   
  4. if(count($start_tags[1]) != count($end_tags[1])) return false;   
  5. for($i = 0; $i < count($start_tags[1]); $i++) {   
  6. if(!in_array($start_tags[1][$i], $end_tags[1])) return false;   
  7. }   
  8. return true;   
  9. }   

解释:
/<([a-zA-Z0-9]+)\\s*[^\\/>]*>/这个模式是用来匹配HTML 的标记(如:、

等等,但是除了
这种)的,并且在$start_tags 保持着标签
的名字(如:head、div 等)。而/<\\/([a-zA-Z0-9]+)>/这个模式是用来匹配闭合的HTML
标记(如:,
等)的。并且在$end_tags 中保持这闭合的标签名。然后我们用
count($start_tags[1]) != count($end_tags[1])这个条件语句来判断开始的标记跟闭合的
标记是否相等,不相等就说明没闭合。最后用in_array($start_tags[1][$i], $end_tags[1])
来判断开始标跟闭合的标记是否相等。至此,我们就完成了HTML 的匹配了!
2 匹配E-mail 格式
代码片段
 

PHP代码
  1. function check_email($email) {   
  2. if(preg_match("/^[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*@([a-z\d][-a-z\  
  3. d]*[a-z\d]\.)+[a-z][-a-z\d]*[a-z]$/", $eamil)) return true;   
  4. return false;   
  5. }   

解释:
不要被
/^[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*@([a-z\d][-a-z\d]*[az\
d]\.)+[a-z][-a-z\d]*[a-z]$/
这条模式给吓跑了, 其实也很简单的。前部分
[\w\d!#$%&'*+-\/=?^`{|}~]+(\.[\w\d!#$%&'*+-\/=?^`{|}~]+)*只是匹配符合RFC-2882 标
准的E-mail 地址允许出现的字符,就是英文字母,数字跟一些符号,有兴趣可以查询
RFC-2882 手册,而([a-z\d][-a-z\d]*[a-z\d]\.)+就是匹配HOST 的。最后[a-z][-a-z\d]*[a-z]
就是匹配顶级域名的(如:.com、.org)。
3 非贪心模式
有时候使用正则表达式的时候,你会发现有以下的问题:
代码片段
 

PHP代码
  1. preg_match('/".*"/', 'Tony say:"hello", Jack say: "Hi"', $matches);   
  2. print_r($matches);  


很惊奇的你会发现匹配的是这样的内容"hello", Jack say: "Hi",而不是"hello"和
"Hi"。这就是贪心匹配引起的。在贪心匹配中,正则表达式会尽可能的匹配最多的字
符,所以出现了第一种情况,但是我们想要的是第二种情况,那我们要怎么做呢?
我们可以使用非贪心匹配,将刚才的模式改为/".*?"/这样就可以看见我们想要的
结果了。*?这个就是非贪心匹配模式。还有另外一种就是+?。
? *?:前面的字符可以出现任意多次,但是遇到*?后的一个字符即停止匹配。
? +?:前面的字符可以出现一次或者多次,但是遇到+?后的一个字符即停止匹
配。
4 检测一个用户密码是否安全
代码片段
 

PHP代码
  1. function is_good_pw($pw) {   
  2. if(preg_match('/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/', $pw)) {   
  3. return true;   
  4. }   
  5. return false;   
  6. }  


解释:
在本例中,我们使用了/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/模式来匹配我们的
密码。在这个模式中,我们使用了正则表达式中的前瞻模式(?=)。(?=.*[0-9])这个是匹
配密码中有数字,而(?=.*[a-z])是匹配密码中有小写字母,最后(?=.*[A-Z])就是匹配密
码中有大写字母。而.{8,16}这个就是匹配密码是由8 至16 个字符组成的。那么我们
的密码就需要有数字,大写字母和小写字母组成的就属于安全的密码了~
5 匹配一个网站中的所有链接
代码片段
 

PHP代码
  1. function get_links($link) {   
  2. $html = file_get_contents($link);   
  3. $html = str_replace("\n", "", $html);   
  4. $html = preg_replace('/
  5. $html = preg_replace('/<\/a>/', "\n", $html);   
  6. preg_match_all('/.*?<\/a>/', $html, $matches);   
  7. return($matches);   
  8. }  


在这个例子中,我们想用file_get_contents 来取得一个网页的内容。然后用
str_replace("\n", "", $html)把所有的换行去掉。再用preg_replace('/ preg_replace('/<\/a>/', "\n", $html)来把所有的.....模式另起一行。
最后就用preg_match_all('/.*?<\/a>/', $html, $matches) 匹配链接模式。
/.*?<\/a>/就是匹配.....这种模式的正则表达式。那我们为什
么要把.....链接另起一行呢??因为在/.*?<\/a>/模式中,.*
是不能匹配换行的,所以就如不在同一行就不能匹配了!!所以我们要这样
做!



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 本文详细探讨了Linux系统中的文件权限设置,包括常见的755、700等权限模式,以及这些权限在实际应用中的具体含义和作用。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • Go从入门到精通系列视频之go编程语言密码学哈希算法(二) ... [详细]
  • 最新版 EasyCriteria 3.0 已正式上线,该版本经过全面重构,带来了多项性能优化与功能增强。更多详情请参阅官方文档:http://uaihebert.com/?p=1898 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
author-avatar
姚威阳_489
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有