`
sunwe
  • 浏览: 13599 次
  • 性别: Icon_minigender_1
  • 来自: 德州
文章分类
社区版块
存档分类
最新评论

正则表达式的零宽断言

阅读更多

分类 代码/语法 说明 捕获 零宽断言 注释
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

 

 “(?<!exp)"的意思是匹配前面不是exp的位置

因此匹配前面不是反斜杠的正则表达式应该这样写:(?<!\\)\*

感觉关于零宽断言的内容写的比较晦涩难懂(郁闷的发现很多网上关于这个内容的介绍就是直接copy了这篇文章的内容),通过自己的理解整理了一下。
第一种是所谓的零宽度正预测先行断言,以(?=exp)的形式出现,它匹配的是exp前面的那个位置,特别要注意的是它匹配的只是一个位置,而不是任何字符。比如,\b\w+(?=ing\b)在查找I'm singing while you're dancing的时候会匹配sing和danc,因为其中的(?=ing)匹配了singing的sing和ing之间的那个位置,还有dancing的danc和ing之间的位置,即ing之前的那个位置。如果理解了第一种零宽断言,后面的三种也就很好理解了。
第二种是零宽度正回顾后发断言,以(?<=exp)的形式出现,它匹配的是exp后面的那个位置。同样是上面的那个例子,如果正则表达式变为\b\w+(?<=ing\b),匹配结果就变成了singing和dancing,因为(?& lt;=ing)匹配的是ing后面的位置。
第三种是零宽度负预测先行断言,以(?!exp)的形式出现,它匹配的是后面跟的不是exp的位置。比如\b\w+n(?!g)\w+\b,在查找I'msinging while you're dancing的时候匹配了dancing,因为n(?!g)指的就是n后面不跟g,所以虽然有好几个单词里都有n,但是只有dancing里有n后面不跟g。
第四种是零宽度正回顾后发断言,以(?<!exp)的形式出现,它匹配的是前面不是exp的位置。同样是第三种情况的那个例子,如果用\b\w+n(?<!g)\w+\b去查找I'm singing while you're dancing的话会匹配singing和dancing,因为这两个单词的n的前面都不是g。
总之,零宽断言是用来匹配和exp相关的位置的,不是匹配任意的字符。

如:匹配《count="2016"》《count="5679"》《count="2347"》《count="1234"》字符串中不是《count="1234"》的所有内容 可以写作的正则式:count="((?!1234)\d)+?"

分享到:
评论

相关推荐

    正则表达式 零宽断言

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

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

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

    正则表达式零宽断言详解

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

    正则表达式大全.docx

    以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...

    源码(精通正则表达式&实战正则表达式)

    2. **断言**:零宽断言如^表示行首,$表示行尾,\b表示单词边界,\B表示非单词边界,(?=pattern)和(?!pattern)分别表示前瞻和反向前瞻断言。 3. **回溯与贪婪与非贪婪匹配**:了解如何控制匹配的范围,避免回溯带来...

    正则表达式.rar || 正则表达式.rar

    3. 零宽断言:与预查类似,零宽断言不会消耗字符,如"^"表示行首,"$"表示行尾,"\b"表示单词边界,"\B"表示非单词边界。 4. 选择器:"|"符号用于表示选择,如"a|b"匹配'a'或'b'。 5. 重复模式:"{n,m}?"(懒惰匹配...

    Excel VBA 正则表达式视频教程

    001_正则表达式初体验.wmv ...020_正则表达式非捕获分组之零宽断言.wmv 021_正则表达式非捕获分组之零宽断言2.wmv 022_正则表达式非捕获分组之负向零宽断言.wmv 023_正则表达式之贪婪与懒惰.wmv 024_正则表达式实例应用

    Python基础入门知识之正则表达式学习 正则表达式30分钟入门教程 共21页.pdf

    零宽断言如`\b`表示单词边界,`\B`表示非单词边界,`(?=...)`和`(?!...)`是前瞻断言,`(?:...)`是无捕获分组。 十五、负向零宽断言 负向零宽断言如`(?&lt;!...)`表示前面不匹配某个模式。 十六、注释 在正则表达式中...

    常用正则表达式 正则表达式

    7. **零宽断言**: - `(?=pattern)`:正向先行断言,检查当前位置后面是否能匹配 pattern,但不消耗字符。 - `(?!pattern)`:负向先行断言,检查当前位置后面不能匹配 pattern。 - `(?)`:正向后行断言,检查当前...

    php正则表达式手册

    此外,还涉及到了正则表达式中的一些特殊结构,如锚点(用于定位字符串的开始和结束)和零宽断言(匹配某些内容但不包含在匹配结果中)。 参考文献部分则为学习者提供了扩展阅读材料,以便更深入地理解正则表达式的...

    正则表达式 正则表达式 正则表达式

    5. **零宽断言**: - **前瞻断言**:如"assert(?=pattern)",匹配"assert"后紧跟着"pattern"的位置,但不包含"pattern"本身。 - **后顾断言**:如"lookbehind(?)",匹配"pattern"前紧跟着的位置,但不包含"pattern...

    正则表达式.CHM

    在这个CHM文件中,我们可以期待找到关于正则表达式的各种详细信息,包括基本概念、语法、特殊字符、预定义字符类、量词、分组、零宽断言、回溯以及更高级的主题。 正则表达式的核心概念包括: 1. 基本元素:如`.`...

    正则表达式入门教程(pdf版

    随着学习的深入,会接触到更复杂的概念,如字符类(class)、分枝条件(branch)、分组(group)、后向引用(backreference)、零宽断言(lookaround)以及贪婪与懒惰匹配(greedy and lazy matching)等。...

    史上最好的正则表达式教程.pdf

    9. 零宽断言:匹配指定位置而不消耗字符,包括正向零宽断言(例如 (?=...))和负向零宽断言(例如 (?&lt;!...)),用于定位条件而不改变字符串。 10. 贪婪与懒惰:正则表达式的匹配默认是贪婪的,尽可能多地匹配字符;...

    正则表达式经典实例

    7. 零宽断言:不消耗字符,但进行断言检查。例如,“(?)bar”会匹配位于“foo”后面的“bar”。 正则表达式在数据验证、文本处理、搜索和替换等场景中极为有用。比如在编写程序时,可以用正则表达式来验证用户输入...

    正则表达式文章和测试工具

    "正则表达式之道之二"和"正则表达式之道之三"可能进一步探讨了更高级的主题,例如后向引用、零宽断言、预查和反向预查等。 在学习过程中,实践是至关重要的,这就是"工具 正则练习兼文本处理器 2_0.htm"的作用。这...

    正则表达式30分钟入门教程-附常用表达式.chm

    7. **零宽断言** - `(?=pattern)`:正向前瞻,匹配后面紧跟pattern的位置。 - `(?!pattern)`:负向前瞻,匹配后面不跟pattern的位置。 - `(?)`:正向后顾,匹配前面紧跟pattern的位置。 - `(?&lt;!pattern)`:负向...

    DEELX 是一个在 C++ 环境下的与 Perl 兼容的正则表达式引擎

    ...)` 分别表示向前和向后零宽断言,用于检查某个位置是否能匹配特定模式,但不消耗字符。 6. **后向引用**:在环视断言中使用 `\g{N}` 实现后向引用,匹配与之前第N个捕获组相同的内容。 DEELX V1.2 版本可能包含...

Global site tag (gtag.js) - Google Analytics