`
wkf41068
  • 浏览: 457665 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正则子表达式应用--向前向后查找

阅读更多
有些时候我们需要用正则表达式标记要匹配的文本的位置(而不仅仅是文本本身)。这就涉

及到了前后查找(lookaround , 对某一位置的前、后内容进行查找)。

先来看一个例子: 我们需要找出html中出现在<title>和</title>标签之间的文字。

文本: 
<head>
<title> John's HomePage </title>
</head>

正则表达式: <[tT][iI][lL][eE]>.*</[tT][iI][lL][eE]> 

匹配到的是:<title> John's HomePage </title>  但是我们要的结果是:

John's HomePage 这个时候就需要前后查找了(只查出<title> 和</title> 之间的结果)



向前查找: 指定了一个必须匹配但不在结果中返回的模式.向前查找实际就是一个子表达式。

从语法上看:一个向前查找模式其实就是一个以?=开头的子表达式,需要匹配的文本跟在=后

面。

注意: 常见的正则表达式实现都支持向前查找,但是很多都不支持向后查找。

      Java , .NET , PHP 和 Perl 等支持向后查找。

来看一例子: 在一文本中获取所有URL的协议名称,以作后续处理。
文本: http://www.huawei.com

       https://mail.huawei.com

       ftp://ftp.huawei.com

使用向前查找正则: .+(?=:)   结果是: https  http ftp

如果不适用向前查找而使用: .+(:)  结果为 https:  http: ftp: 包含了多余的:

注意: 向前查找(和向后查找)匹配本身的结果不会出现在返回的结果中. 其返回的结果是0

字节的。 所以前后查找有时也被称为零宽度匹配操作。

提示:任何一个子表达式都可以转换为一个向前查找表达式,只需给其加上一个?=前缀即可。

向后查找: 正如前面?= 将向前查找(查找出现在被匹配文本之后的字符,但不消费那个

字符); 向后查找(查找出现在被匹配文本之前的字符,但不消费他) 向后查找操作符是?<=

例子: 找出$45.54  $87.55  中价格提取但要求结果中不带有$ 

正则是(?<=\$)\d+\.\d+

前后查找结合, 如最前面提到的一个例子获取<title></title>之间的文本

(?<=<[tT][iI][lL][eE]>).*(?=</[tT][iI][lL][eE]>) 

对前后查找取非就前面介绍到的向前查找和向后查找通常来匹配文本,其母的是为了确定

将被返回为匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)


(?=) 正向前查找    (?!) 负向前查找
(?<=) 正向后查找   (?<!) 负向后查找

对于此有一需求
I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on 

this order.

1. 只查找钱款: (?<=\$)\d+     结果是:30  5

2. 只查找数量: \b(?<!\$\d+\b  结果是:10 12 8  注意\b是单词边界。
分享到:
评论

相关推荐

    正则表达式参考文档 - Regular Expression Syntax Reference

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一系列特定的字符、符号和语法来定义一个规则,用来查找、提取或替换符合该规则...

    正则表达式在数据库查询中的应用

    ### 正则表达式在数据库查询中的应用 #### 引言 在数据库管理与应用程序开发中,查询数据是一项常见的任务。传统的SQL查询虽然强大,但在处理复杂查询时可能存在一定的局限性,尤其是涉及到文本数据的模式匹配时。...

    精通正则表达式-第三版-简体中文版

    1. **Perl**:Perl语言以其强大的正则表达式支持而闻名,提供丰富的语法和高级功能,如后向引用、条件表达式等。 2. **Java**:从Java 1.4开始引入java.util.regex包,支持正则表达式,Java 1.5和1.6增加了更多特性...

    精通正则表达式中文版英文版_中文版为扫描版

    正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或者提取特定模式。它是编程语言中不可或缺的一部分,特别是在处理文本数据时。"精通正则表达式"是一本备受推崇的书籍,由Jeffrey E. F. Friedl...

    mtracer2.0正则表达式验证工具

    - **代码搜索**:在IDE中,使用正则表达式查找和替换代码片段。 综上所述,mtracer2.0正则表达式验证工具是开发和测试正则模式的有力助手,无论你是初学者还是经验丰富的开发者,都能从中受益。通过掌握正则表达式...

    正则表达式正则表达式.zip

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它在IT行业中广泛应用,尤其是在编程语言、文本编辑器、数据分析和网页爬虫等领域。本压缩包包含一个名为“正则表达式语法.docx”的...

    正则表达式.CHM

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它在编程、数据分析和网站开发等领域有着广泛的应用。本资源提供的"正则表达式.CHM"是一个关于正则表达式的完整指南,是学习和精通正则...

    正则表达式利器

    正则表达式(Regular Expression,简称regex)是编程领域中的一种强大的文本处理工具,它能够高效地进行字符串匹配、查找、替换以及提取等操作。在IT行业中,掌握正则表达式是提高工作效率的关键技能之一,尤其对于...

    精通正则表达式05

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。在JavaScript中,正则表达式扮演着至关重要的角色,它允许开发者进行复杂的文本...

    正则表达式规则及常用正则表达式列举

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一系列特定的字符、符号和操作符来定义一个模式,以此来检查字符串是否符合这个...

    正则表达式经典实例

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Java编程语言中,正则表达式提供了强大的字符串处理功能,使得开发者能够高效地处理...

    C# 正则表达式大全

    在编程领域,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在C#中,正则表达式库提供了丰富的功能,使得开发者能够高效地处理字符串。本文将深入探讨C#中的正则表达式,...

    java正则表达式详解java正则表达式详解

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式(Regular Expression,简称regex)是一种由字符、元字符和操作符组成的模式,可以用来匹配...

    js常用正则表达式

    正则表达式,简称为regex或regexp,是一种用于匹配、查找、替换等操作的字符组合模式,广泛应用于各种编程语言中,包括JavaScript。以下是一些常用的JS正则表达式知识点,它们可以帮助开发者更高效地进行字符串操作...

    java正则表达式及例子 pdf

    正则表达式在各种场景下都有广泛应用,如数据验证、文本提取、搜索替换等。本篇文章将深入探讨Java中的正则表达式及其使用实例。 一、Java正则表达式基础 1. 字符类: - `.`:匹配任意单个字符,除了换行符。 - ...

    [Groovy入门]第四讲.数据搜索功能与正则表达式

    - **正向前瞻与后向后瞻**:使用`(?=...)`和`(?!...)`来指定匹配的条件,但不包含这些条件。 ### 4. 示例应用 在实际开发中,数据搜索和正则表达式经常结合使用。例如,从日志文件中提取错误信息,或者在配置文件...

    正则表达式的一个Demo

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一种简洁而强大的语法来定义一系列字符或字符序列,可以用来检测一个字符串是否...

    正则表达式

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一套预定义的规则和特殊字符来定义一个模式,这个模式可以用来验证字符串是否符合特定的格式,或者从中提取符合该模式的数据。在IT...

    正则表达式辅助软件大全

    例如,`/pattern` 用于向前查找匹配`pattern`的文本,`\=`前缀可以用于执行一个表达式替换,这允许你在替换命令中使用复杂的正则表达式。此外,Vim的可视模式和操作符等待模式也让正则表达式在多行编辑时更为方便。 ...

Global site tag (gtag.js) - Google Analytics