`
Hooopo
  • 浏览: 335142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则表达式–零宽断言详解

阅读更多
零宽断言的意思是(匹配宽度为零,满足一定的条件/断言) 我也不知道这个词语是那个王八蛋发明的,简直是太拗口了。

零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。

断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。

其中零宽断言又分四种

先行断言   也叫零宽度正预测先行断言(?=表达式)          表示匹配表达式前面的位置

例如 [a-z]*(?=ing) 可以匹配cooking singing 中的cook与sing

注意:先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个ing(也就是先行断言中的表达式)然后 再匹配其前面的表达式,若无法匹配则继续查找第二个ing 再匹配第二个 ing前面的字符串,若能匹配 则匹配

例如:.*(?=ing) 可以匹配cooking singing 中的cooking sing 而不是 cook

后发断言        也叫零宽度正回顾后发断言        (?<=表达式)   表示匹配表达式后面的位置

例如(?<=abc).* 可以匹配abcdefg中的defg       

注意:后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式,若无法匹配则继续查找第二个abc 再匹配第二个abc后面的字符串,若能匹配 则匹配

例如(?<=abc).* 可以匹配abcdefgabc中的defgabc 而不是abcdefg

负向零宽断言

负向零宽断言 (?!表达式) 也是匹配一个零宽度的位置,不过这个位置的“断言”取表达式的反值,例如 (?!表达式) 表示 表达式 前面的位置,如果 表达式 不成立 ,匹配这个位置;如果 表达式 成立,则不匹配:同样,负向零宽断言也有“先行”和“后发”两种,负向零宽后发断言为 (?<!表达式)

负向零宽后发断言(?<!表达式)

负向零宽先行断言 (?!表达式)

负向零宽断言要注意的跟正向的一样
分享到:
评论
7 楼 yuhao_1202 2011-11-30  
不错,一直不知道零宽断言可以用.*代替任意字符。
6 楼 Hooopo 2009-09-21  
5 楼 Hooopo 2009-06-12  
幸存者 写道

night_stalker 写道
负向零宽正回顾后发断言很强大…… 有一种 ↓↓↑↑→→←←ABAB 的感觉。

魂斗罗?

貌似拳皇97...
4 楼 幸存者 2009-06-12  
night_stalker 写道

负向零宽正回顾后发断言很强大…… 有一种 ↓↓↑↑→→←←ABAB 的感觉。

魂斗罗?
3 楼 Hooopo 2009-06-12  
   
2 楼 night_stalker 2009-06-12  
负向零宽正回顾后发断言

很强大…… 有一种 ↓↓↑↑→→←←ABAB 的感觉。
1 楼 RednaxelaFX 2009-06-12  
相关术语在《精通正则表达式》一书的翻译里翻得不错,lookahead翻为“环视”,很形象。说真的我很少能读到翻译得那么顺的技术书……

相关推荐

    正则表达式。包括零宽断言,正则替换的150种表达方式

    本文将深入探讨正则表达式的高级应用,特别是零宽断言和正则替换的150种表达方式。 ### 一、零宽断言 零宽断言(Zero-width Assertions)在正则表达式中用于标记位置,但不会消耗任何字符。有两种主要类型:正向零...

    正则表达式 零宽断言

    ### 正则表达式之零宽断言详解 #### 基本概念 正则表达式作为一种强大的文本处理工具,在日常开发中应用广泛。其中,**零宽断言**是正则表达式的一个较为复杂的特性,它允许在不消耗任何字符的情况下对文本中的...

    正则表达式之零宽断言实例详解【基于PHP】

    本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考,具体如下: 前言 之前我曾写了一篇关于正则表达式的文章(//www.jb51.net/article/111359.htm) 在该文章中详细介绍了正则,但是关于零宽断言介绍却是很少...

    正则表达式零宽断言详解

    正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以本章节重点从匹配原理方面进行一下分析。零宽断言还有其他的名称,例如”环视”或者”预搜索”等等,不过这些都不是我们关注的重点。 一.基本概念: 零宽断言...

    正则表达式详解(20分钟看懂正则)

    ### 正则表达式详解 #### 一、正则表达式概述 正则表达式是一种强大的文本模式匹配工具,广泛应用于编程语言如Java中,用于处理字符串数据,实现字符串的搜索、替换、提取等操作。它能够精确描述复杂的文本规则,...

    正则表达式工具和常用表达式详解.zip

    在“正则表达式工具和常用表达式详解.zip”压缩包中,你将找到关于正则表达式的全面指南,无论你是初学者还是有经验的开发者,都能从中受益。这个资料可能包括了以下内容: 1. **正则表达式基础**:介绍正则表达式...

    javaScript 正则表达式详解

    JavaScript 正则表达式详解 JavaScript 中的正则表达式是指使用特殊字符来描述字符串模式的表达式。正则表达式可以用来匹配、检索和操作字符串。 RegExp 对象 在 JavaScript 中,正则表达式可以被定义为一个 ...

    正则表达式经典实例

    1. **基本原理和技巧**:本书首先通过一个精炼的教程帮助读者掌握正则表达式的基础知识,如元字符、量词、分组、断言等,使读者能够迅速上手并熟练运用这些技巧。 2. **多语言支持**:书中详细阐述了如何在不同的...

    java正则表达式详解(PDF)

    通过这份"java正则表达式详解(PDF)"文档,读者将能深入了解Java正则表达式的各个方面,掌握如何在实际项目中有效地运用正则表达式进行字符串处理。无论你是Java初学者还是经验丰富的开发者,这份资料都将是一份...

    Python3如何优雅地使用正则表达式.pdf

    正则表达式是一种用于匹配字符串中字符组合的模式。在Python3中,正则表达式经常被用于文本处理任务,如搜索、替换、提取信息等。在学习Python3如何优雅地使用正则表达式之前,我们需要先理解一些基本概念和组件。 ...

    正则表达式用法详解很实用

    10. **零宽断言**:`\b`、`\B`、`(?=...)`、`(?&lt;!...)`等断言匹配的位置,不消耗字符。 11. **贪婪与懒惰**:默认情况下,`*`、`+`、`?`是贪婪的,尽可能多地匹配;加上`?`使其变为懒惰,尽可能少地匹配。 12. **...

    java正则表达式及例子 pdf

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,...通过阅读《Java 正则表达式的总结和一些小例子.pdf》和《Java正则表达式详解.pdf》,你将能够深入学习和实践更多正则表达式的用法,进一步提升编程技能。

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

    **mtracer2.0正则表达式验证工具详解** 在信息技术领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于搜索、替换、提取或验证字符串模式。正则表达式广泛应用于数据验证、文本分析...

    正则表达式使用详解很好的

    ### 正则表达式使用详解 正则表达式是一种强大的文本匹配工具,广泛应用于各种编程语言和工具中,用于字符串的查找、替换等操作。本文将深入解析正则表达式的各个组成部分及其用法。 #### 一、基本概念 在正则...

    Java 正则表达式文档

    ### Java正则表达式知识点详解 #### 一、正则表达式基础概念 正则表达式(Regular Expression)是一种在字符串操作中具有强大功能的工具,它可以用来进行字符串的匹配、搜索、替换等操作。Java提供了`java.util....

    Python正则表达式分组概念与用法详解

    在实际应用中,正则表达式的分组、引用、断言等功能都是实现复杂文本解析和数据提取不可或缺的工具。掌握这些知识点,能够帮助开发者在处理文本数据时更加得心应手。总之,Python正则表达式的分组概念及其用法是提高...

Global site tag (gtag.js) - Google Analytics