本文实例讲述了正则表达式教程之前后查找lookaround。分享给大家供大家参考,具体如下:

注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。
一、问题引入
在HTML页面中,匹配出一对标签之间的文本,如匹配出页面的标签,即<title>与</title>之间的文本:
文本:<head><TITLE>welcome to my page</title></head>
正则表达式:<[Tt][Ii][Tt][Ll][Ee]>.*?</ [Tt][Ii][Tt][Ll][Ee]>
结果:<head>【<TITLE>welcome to my page</title>】</head>
分析:<[Tt][Ii][Tt][Ll][Ee]>表示不区分大小写,这个模式匹配到了title标签以及它们之间的文本,但是并不完美,因为我们只想要title标签之间的文本,而不包括标签本身。解决这个问题我们就需要用到前后查找(lookaround)。
二、向前查找
向前查找指定了一个必须匹配但不在结果中返回的模式。向前查找实际上就是一个子表达式,它以?=开头,需要匹配的文本跟在=的后面。
看一个匹配出一个URL地址中协议部分的例子:
文本:http://blog.csdn.net/mhmyqn
正则表达式:.+(?=:)
结果:【http】://blog.csdn.net/mhmyqn
分析:URL地址中协议部分是在:之前的部分,模式.+匹配任意文本,子表达式(?=:)匹配:,但是被匹配到的:并没有出现在结果中。我们使用?=向正则表达式引擎表明,只要找到:就行了,但不包括在最终的返回结果里。这里如果不使用向前匹配(?=:),而是直接使用(:),那么匹配结果就会是http:了,它包括了:,并不是我们想要的。
注意:前后查找中的前、后是指模式与被查找文本的相对位置而言的,左为前,右为后。即向前查找为:xxx(?=xxx),而向后查找为(?<=xxx)xxx,向后查找在接下来会介绍到。
三、向后查找
向后查找操作符是?<=。但是并不是所有的正则表达式实现都支持向后查找,JavaScript就不支持,java语言支持向后查找。
比如要查找文本当中的价格(以$开头,后面跟数字),结果不包含货币符号:
文本:category1:$136.25,category2:$28,category3:$88.60
正则表达式:(?<=\$)\d+(\.\d+)?
结果:category1:$【136.25】,category2:$【28】,category3:$【88.60】
分析:(?<=\$)模式匹配$,\d+(\.\d+)?模式匹配整数或小数。从结果可以看出,结果不没有包括货币符号,只匹配出了价格。如果不使用向后查找,情况会是什么样呢?使用模式$\d+(\.\d+)?,这样会把$包含在结果中。使用模式\d+(\.\d+)?,又会把categery1(23)中的数字也匹配出来,都不是我们想要的。
注意:向前查找模式的长度是可变的,它们可以包含.、*、+之类的元字符;而向后查找模式只能是固定长度,不能包含.、*、+之类的元字符。
四、把向前查找和向后查找结合起来
把向前查找和向后查找结合起来使用,即可解决前面HTML标签之间的文本的问题:
文本:<head><TITLE>welcome to my page</title></head>
正则表达式:(?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?=</ [Tt][Ii][Tt][Ll][Ee]>)
结果:<head><TITLE>【welcome to my page】</title></head>
分析:从结果可以看出,问题完美的解决了。(?<=<[Tt][Ii][Tt][Ll][Ee]>)是一个向后操作,它匹配<title>但不消费它,(?=</[Tt][Ii][Tt][Ll][Ee]>)是一个向前操作,它匹配</title>但不消费它。最终返回的匹配结果只包含了标签之间的文本了。
五、对前后查找取非
前面说到的向前查找和向后查找通常都是用来匹配文本,其目的是为了确定将被返回的匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)。这种用法叫正向前查找和正向后查找。还有一种负向前查找和负向后查找,是查找那些不与给定模式相匹配的文本。
前后查找的操作符:
| (?=) | 正向前查找 |
| (?!) | 负向前查找 |
| (?<=) | 正向后查找 |
| (?<!) | 负向后查找 |
比如一段文本中即有价格(以$开头,后面跟数字)和数量,我们要找出价格和数量,先来看查找价格:
文本:I paid $30 for 10 apples, 15 oranges, and 10 pears. I saved $5 onthis order.
正则表达式:(?<=\$)\d+
结果:I paid 【$30】 for 10 apples, 15 oranges, and 10 pears. I saved 【$5】 on thisorder.
查找数量:
文本:I paid $30 for 10 apples, 15 oranges, and 10 pears. I saved $5 onthis order.
正则表达式:\b(?<!\$)\d+\b
结果:I paid $30 for 【10】 apples, 【15】 oranges, and 【10】pears. I saved $5 on this order.
分析:(?<!\$)表示一个负向后查找,它使得结果只包含那些不以$开头的数值。
六、小结
有了前后查找,就可以对最终的匹配结果包含哪些内容做出精确的控制。前后查找操作使我们可以利用子表达式来指定文本匹配操作发生的位置,并收到只匹配不消费的效果。
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
希望本文所述对大家正则表达式学习有所帮助。
# 正则表达式
# 前后查找
# lookaround
# 正则表达式查找相似单词的方法
# 学习Java正则表达式(匹配、替换、查找)
# 正则表达式匹配
# 替换
# 查找
# JAVA中正则表达式匹配
# 切割的方法
# js正则查找match()与替换replace()用法实例
# Powershell学习笔记--使用正则表达式查找文件
# 如何在PHP中使用正则表达式进行查找替换
# 用正则查找html中有id属性的html标签
# 正则表达式验证IPV4地址功能实例分析
# 正则表达式教程之子表达式用法分析
# 正则表达式教程之位置匹配详解
# 正则表达式教程之重复匹配详解
# 正则表达式教程之操作符及说明详解
# 是一个
# 但不
# 可以看出
# 结合起来
# 就会
# 是在
# 出了
# 都在
# 就不
# 是指
# 出现在
# 会在
# 说到
# 而不
# 给大家
# 将被
# 就可
# 使我
# 要找
相关文章:
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
移民网站制作流程,怎么看加拿大移民官网?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
青岛网站建设如何选择本地服务器?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在Golang中指定模块版本_使用go.mod控制版本号
*服务器网站为何频现安全漏洞?
如何用y主机助手快速搭建网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
完全自定义免费建站平台:主题模板在线生成一站式服务
linux top下的 minerd 木马清除方法
如何在香港免费服务器上快速搭建网站?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
潮流网站制作头像软件下载,适合母子的网名有哪些?
html制作网站的步骤有哪些,iapp如何添加网页?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何高效完成独享虚拟主机建站?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何快速登录WAP自助建站平台?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
高防服务器如何保障网站安全无虞?
香港服务器部署网站为何提示未备案?
如何在阿里云通过域名搭建网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
一键网站制作软件,义乌购一件代发流程?
制作表格网站有哪些,线上表格怎么弄?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
建站主机如何安装配置?新手必看操作指南
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
已有域名能否直接搭建网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
无锡营销型网站制作公司,无锡网选车牌流程?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何撰写建站申请书?关键要点有哪些?
,南京靠谱的征婚网站?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
建站之星×万网:智能建站系统+自助建站平台一键生成
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
建站主机与虚拟主机有何区别?如何选择最优方案?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
浅析上传头像示例及其注意事项
详解jQuery停止动画——stop()方法的使用
存储型VPS适合搭建中小型网站吗?
网站app免费制作软件,能免费看各大网站视频的手机app?
清除minerd进程的简单方法
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
*请认真填写需求信息,我们会在24小时内与您取得联系。