正则表达式教程之前后查找lookaround详解_正则表达式
这篇文章主要介绍了正则表达式教程之前后查找lookaround,结合具体问题分析了向前查找及向后查找功能的实现技巧与注意事项,需要的朋友可以参考下
本文实例讲述了正则表达式教程之前后查找lookaround。分享给大家供大家参考,具体如下:
注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。
一、问题引入
在HTML页面中,匹配出一对标签之间的文本,如匹配出页面的标签,即
文本:
正则表达式:<[Tt][Ii][Tt][Ll][Ee]>.*? [Tt][Ii][Tt][Ll][Ee]>
结果:【
分析:<[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标签之间的文本的问题:
文本:
正则表达式:(?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?= [Tt][Ii][Tt][Ll][Ee]>)
结果:
分析:从结果可以看出,问题完美的解决了。(?<=<[Tt][Ii][Tt][Ll][Ee]>)是一个向后操作,它匹配
五、对前后查找取非
前面说到的向前查找和向后查找通常都是用来匹配文本,其目的是为了确定将被返回的匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)。这种用法叫正向前查找和正向后查找。还有一种负向前查找和负向后查找,是查找那些不与给定模式相匹配的文本。
前后查找的操作符:
(?=) | 正向前查找 |
(?!) | 负向前查找 |
(?<=) | 正向后查找 |
(? | 负向后查找 |
比如一段文本中即有价格(以$开头,后面跟数字)和数量,我们要找出价格和数量,先来看查找价格:
文本: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(?
结果:I paid $30 for 【10】 apples, 【15】 oranges, and 【10】pears. I saved $5 on this order.
分析:(?
六、小结
有了前后查找,就可以对最终的匹配结果包含哪些内容做出精确的控制。前后查找操作使我们可以利用子表达式来指定文本匹配操作发生的位置,并收到只匹配不消费的效果。
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
以上是正则表达式教程之前后查找lookaround详解_正则表达式的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

关闭iPhone版“查找”后会发生什么?“查找我的iPhone”可帮助您定位丢失或被盗的设备。启用后,“查找我的iPhone”可让您在地图上跟踪设备的位置、播放声音并帮助您找回设备。“查找”还包括一个激活锁,可防止任何人使用您的iPhone。当您关闭“查找我的iPhone”时,您将失去所有这些功能,这可能会使恢复丢失的Apple设备变得困难。虽然“查找我的iPhone”非常有用,但当您想出售、捐赠、以旧换新手机或想要将其送去更换电池或任何其他服务时,您应该禁用它。这样做将确保没有人可以访问有关您

Apple的“查找”应用程序允许您定位您的iPhone或其他设备,以防止丢失或遗忘。虽然“查找”是一个有用的工具来追踪设备,但如果您关注隐私问题、不想耗尽电池或其他原因,您可能希望禁用它。幸运的是,有几种方法可以关闭iPhone上的“查找”,我们将在这篇文章中解释所有这些方法。如何在iPhone上关闭“查找”[4种方法]您可以通过四种方式关闭iPhone的“查找”。如果您使用方法1关闭“查找”,则可以从要禁用它的设备上执行此操作。要继续执行方法2、3和4,要关闭“查找”的iPhone应关闭电源或

使用C#中的Array.IndexOf函数查找数组中某个元素的索引在C#程序中,当我们需要查找数组中某个元素的索引时,可以使用Array.IndexOf函数。Array.IndexOf函数会在指定的数组范围内查找指定的元素,并返回其第一次出现的索引。如果未找到该元素,则返回-1。下面是一段示例代码,演示了如何使用Array.IndexOf函数查找数组中某个元

硬盘序列号和MAC地址是电脑硬件中重要的标识符,它们在管理和维护电脑系统时非常有用。本文将介绍如何查找硬盘序列号和MAC地址。一、查找硬盘序列号硬盘序列号是硬盘制造商为了识别和追踪硬盘的唯一标识符。在不同的操作系统中,查找硬盘序列号的方法略有不同。Windows系统:打开命令提示符(在开始菜单中搜索“cmd”),然后输入以下命令并按回车键:wmicdisk

PHP中的glob()函数用于查找文件或目录,是一种强大的文件操作函数。它可以根据指定的模式匹配,返回文件或目录的路径。glob()函数的语法如下:glob(pattern,flags)其中,pattern表示要匹配的模式字符串,可以是一个通配符表达式,如*.txt(匹配以.txt结尾的文件),或者是具体的文件路径。flags是一个可选参数,用于控制函数

在这个问题中,我们得到一个包含n个未排序整数值的数组aar[]和一个整数val。我们的任务是在未排序的数组中查找元素的开始和结束索引。对于数组中元素的出现,我们将返回,“起始索引和结束索引”(如果在数组中找到两次或多次)。“单个索引”(如果找到)如果数组中不存在,则“元素不存在”。让我们举个例子来理解问题,示例1Input:arr[]={2,1,5,4,6,2,3},val=2Output:startingindex=0,endingindex=5解释元素2出现两次,第一次出现在索引=0处,第二

电脑硬盘序列号怎么查随着计算机技术的发展,电脑硬盘已经成为我们生活中不可或缺的一部分。无论是存储重要的文件,还是安装操作系统和软件,都需要依靠硬盘来完成。而了解电脑硬盘的一些基本信息,比如硬盘的序列号,可以帮助我们更好地管理和维护电脑系统。那么,电脑硬盘序列号怎么查呢?本文将介绍几种常见的方法。方法一:使用Windows系统自带的命令行工具Windows系统

如何用Python编写哈希查找算法?哈希查找算法,又称为散列查找算法,是一种基于哈希表的数据查找方法。相比于线性查找和二分查找等传统查找算法,哈希查找算法具有更高的查找效率。在Python中,我们可以使用字典(dictionary)来实现哈希表,进而实现哈希查找。哈希查找算法的基本思想是将待查找的关键字通过哈希函数转换成一个索引值,然后根据索引值在哈希表中查
