`

Nagative Lookahead

阅读更多
http://stackoverflow.com/questions/1749437/regular-expression-negative-lookahead

A negative lookahead says, at this position, the following regex can not match.

Let's take a simplified example:

a(?!b(?!c))

a      Match: (?!b) succeeds
ac     Match: (?!b) succeeds
ab     No match: (?!b(?!c)) fails
abe    No match: (?!b(?!c)) fails
abc    Match: (?!b(?!c)) succeeds
The last example is a double negation: it allows a b followed by c. The nested negative lookahead becomes a positive lookahead: the c should be present.

In each example, only the a is matched. The lookahead is only a condition, and does not add to the matched text.



如果写了这样的正则表达式  a(?!b)
就表示匹配所有后面没有b紧跟着的a.

也就是说"ab aa ac ad"
就会匹配到
(a)a
a(a)
(a)c
(a)d

这里只有ab的a是匹配不到的, 因为后面紧跟着b
分享到:
评论

相关推荐

    正则基础之——环视.rar

    环视分为前瞻断言(Positive Lookahead)和后瞻断言(Positive Lookbehind),以及它们的否定形式:负前瞻断言(Negative Lookahead)和负后瞻断言(Negative Lookbehind)。 1. 前瞻断言(Positive Lookahead):...

    PHP如何匹配不包含某些关键词正则写法

    当我们需要匹配不包含某些特定关键词的字符串时,我们需要使用否定前瞻(Negative Lookahead)或者否定后瞻(Negative Lookbehind)。在PHP中,这两种前瞻后瞻都是以 `(?!...)` 和 `(?<!...)` 的形式出现。 首先,...

    Regular Expression

    pattern)`),以及前瞻否定断言(Negative lookahead `(?!pattern)`)和后顾否定断言(Positive lookbehind `(?)`)。它们不消耗字符,仅检查是否存在匹配的模式。 8. **反向引用(Backreferences)**:在分组中,...

    正则基础之 环视 Lookaround

    顺序肯定环视(Lookahead)和顺序否定环视(Negative lookahead)关注于当前位置之后的文本,而逆序肯定环视(Lookbehind)和逆序否定环视(Negative lookbehind)则关注于当前位置之前的文本。 顺序肯定环视((?=...

    JavaScript对象之正则表达式共16页.pdf.zip

    在实际应用中,我们经常需要处理复杂的正则表达式,如捕获组、预查(lookahead 和 lookbehind)、否定预查(negative lookahead 和 negative lookbehind),以及非贪婪匹配。这些高级特性可以实现更精细的文本匹配...

    RegExpr_Regexpr_

    - 预查(Positive Lookahead)与反预查(Negative Lookahead):允许在不包含它们的情况下检查是否匹配某个模式。 - 后顾(Positive Lookbehind)与反后顾(Negative Lookbehind):检查某个位置后面是否满足特定...

    前端 javascript es9语法学习

    ...)` 分别表示零宽否定预查(negative lookahead)和零宽肯定预查(positive lookahead)。它们不会消耗文本,只检查当前位置是否满足条件。例如,检查字符串是否以特定字符开头但不包括该字符: ```javascript ...

    深入浅出正则表达式

    - **向后查看**(Negative Lookahead)`(?!pattern)` 确保匹配的位置后面不跟随特定模式。 - **零宽断言**(Zero-width assertion)是指这些结构不会消耗输入字符串的任何字符,它们仅用于检查某个条件是否满足。 ...

    第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反.rar

    其次,前视取反(Negative Lookahead)以`(?!...)`的形式出现,它确保匹配的字符串后面不跟着特定的模式。假设我们要找出所有不以"not"开头的单词,可以使用以下正则表达式: ```python text = "I am not happy, ...

    正则表达式学习资料整理2

    =...)`和**负向前瞻(Negative Lookahead)**`(?!=...)`用于检查当前位置之后是否满足某种模式,但不实际消耗这些字符。 - **正向回溯(Positive Lookbehind)**`(?)`和**负向回溯(Negative Lookbehind)**`(?<!.....

    正则表达式系统 教程

    正向预查(Positive lookahead)和反向预查(Negative lookahead)允许我们在不实际匹配的情况下检查字符串是否包含特定模式。它们分别用`(?=pattern)`和`(?!pattern)`表示,对于确保某些条件满足或排除某些条件非常...

    Accp5.0 js 第五章

    7. **预查(Positive Lookahead and Negative Lookahead)**:(?:?=...)和(?:?!...)允许我们在匹配时检查某个条件,但不包含在最终匹配结果中。 8. **正向后顾查找(Positive Lookbehind)和负向后顾查找(Negative...

    Perl Regular Expressions

    - **负向先行断言(Negative Lookahead)**:`(?!...)`,确保当前位置之后的文本不满足指定模式。 - **正向后行断言(Positive Lookbehind)**:`(?)`,确保当前位置之前的文本满足指定模式。 - **负向后行断言...

    正则表达式的匹配规则

    2. 非贪婪零宽断言:"negative lookahead" "(?!pattern)" 和 "negative lookbehind" "(?<!pattern)",用于排除匹配。 八、模式修饰符 1. i:使匹配对大小写不敏感。 2. g:全局匹配,查找字符串中所有匹配项,而不...

    Java正则表达式教程

    =...)`)和预查否定(Negative Lookahead `(?!...)`):确保某个模式后面或前面跟随另一个模式,但不包含在最终匹配的文本中。 - 后顾(Positive Lookbehind `(?)`)和后顾否定(Negative Lookbehind `(?<!...)`)...

    正则表达式.rar

    2. **否定预查(Negative lookahead)**:`(?!...)`确保匹配的字符串后面不跟着特定的模式。 3. **后顾反向引用(Backreference)**:`\数字`用于引用前面分组捕获的内容,如`\1`代表第一个分组的内容。 在Java中,...

    mastering_regular_expressions

    ...)是负向预查(negative lookahead),确保后面不跟特定模式。这在某些情况下能避免不必要的回溯。 7. **正向与负向字符集**:[^abc]表示匹配除'a'、'b'、'c'之外的任何字符,这是负向字符集的使用。 8. **模式...

    正则表达式30分钟入门教程.rar

    - **后顾断言(Negative lookahead)**:如"ab(?!c)"匹配"ab",但不能在后面跟着"c"。 7. **预查否定(Positive and Negative Lookbehind)** - **正向预查断言(Positive lookbehind)**:如"(?)c"匹配"c",但必须在...

Global site tag (gtag.js) - Google Analytics