分类
代码/语法
说明
捕获
(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种表达方式。 ### 一、零宽断言 零宽断言(Zero-width Assertions)在正则表达式中用于标记位置,但不会消耗任何字符。有两种主要类型:正向零...
正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以本章节重点从匹配原理方面进行一下分析。零宽断言还有其他的名称,例如”环视”或者”预搜索”等等,不过这些都不是我们关注的重点。 一.基本概念: 零宽断言...
以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...
2. **断言**:零宽断言如^表示行首,$表示行尾,\b表示单词边界,\B表示非单词边界,(?=pattern)和(?!pattern)分别表示前瞻和反向前瞻断言。 3. **回溯与贪婪与非贪婪匹配**:了解如何控制匹配的范围,避免回溯带来...
3. 零宽断言:与预查类似,零宽断言不会消耗字符,如"^"表示行首,"$"表示行尾,"\b"表示单词边界,"\B"表示非单词边界。 4. 选择器:"|"符号用于表示选择,如"a|b"匹配'a'或'b'。 5. 重复模式:"{n,m}?"(懒惰匹配...
001_正则表达式初体验.wmv ...020_正则表达式非捕获分组之零宽断言.wmv 021_正则表达式非捕获分组之零宽断言2.wmv 022_正则表达式非捕获分组之负向零宽断言.wmv 023_正则表达式之贪婪与懒惰.wmv 024_正则表达式实例应用
零宽断言如`\b`表示单词边界,`\B`表示非单词边界,`(?=...)`和`(?!...)`是前瞻断言,`(?:...)`是无捕获分组。 十五、负向零宽断言 负向零宽断言如`(?<!...)`表示前面不匹配某个模式。 十六、注释 在正则表达式中...
7. **零宽断言**: - `(?=pattern)`:正向先行断言,检查当前位置后面是否能匹配 pattern,但不消耗字符。 - `(?!pattern)`:负向先行断言,检查当前位置后面不能匹配 pattern。 - `(?)`:正向后行断言,检查当前...
此外,还涉及到了正则表达式中的一些特殊结构,如锚点(用于定位字符串的开始和结束)和零宽断言(匹配某些内容但不包含在匹配结果中)。 参考文献部分则为学习者提供了扩展阅读材料,以便更深入地理解正则表达式的...
5. **零宽断言**: - **前瞻断言**:如"assert(?=pattern)",匹配"assert"后紧跟着"pattern"的位置,但不包含"pattern"本身。 - **后顾断言**:如"lookbehind(?)",匹配"pattern"前紧跟着的位置,但不包含"pattern...
在这个CHM文件中,我们可以期待找到关于正则表达式的各种详细信息,包括基本概念、语法、特殊字符、预定义字符类、量词、分组、零宽断言、回溯以及更高级的主题。 正则表达式的核心概念包括: 1. 基本元素:如`.`...
随着学习的深入,会接触到更复杂的概念,如字符类(class)、分枝条件(branch)、分组(group)、后向引用(backreference)、零宽断言(lookaround)以及贪婪与懒惰匹配(greedy and lazy matching)等。...
9. 零宽断言:匹配指定位置而不消耗字符,包括正向零宽断言(例如 (?=...))和负向零宽断言(例如 (?<!...)),用于定位条件而不改变字符串。 10. 贪婪与懒惰:正则表达式的匹配默认是贪婪的,尽可能多地匹配字符;...
7. 零宽断言:不消耗字符,但进行断言检查。例如,“(?)bar”会匹配位于“foo”后面的“bar”。 正则表达式在数据验证、文本处理、搜索和替换等场景中极为有用。比如在编写程序时,可以用正则表达式来验证用户输入...
"正则表达式之道之二"和"正则表达式之道之三"可能进一步探讨了更高级的主题,例如后向引用、零宽断言、预查和反向预查等。 在学习过程中,实践是至关重要的,这就是"工具 正则练习兼文本处理器 2_0.htm"的作用。这...
7. **零宽断言** - `(?=pattern)`:正向前瞻,匹配后面紧跟pattern的位置。 - `(?!pattern)`:负向前瞻,匹配后面不跟pattern的位置。 - `(?)`:正向后顾,匹配前面紧跟pattern的位置。 - `(?<!pattern)`:负向...
...)` 分别表示向前和向后零宽断言,用于检查某个位置是否能匹配特定模式,但不消耗字符。 6. **后向引用**:在环视断言中使用 `\g{N}` 实现后向引用,匹配与之前第N个捕获组相同的内容。 DEELX V1.2 版本可能包含...