正则表达式中的前瞻(lookahead)和后顾(lookbehind)

218 阅读1分钟

前瞻(Lookahead)

正前瞻(Positive Lookahead)

正前瞻用于确保某一子模式在特定位置之后出现,但不包含在最终匹配中。使用语法 (?=...)

示例: 匹配紧跟在 foo 之后的 bar,但不包括 foo 在结果中:

foo(?=bar)

在字符串 foobar 中,将匹配 foo(但不包括 bar)。

负前瞻(Negative Lookahead)

负前瞻用于确保某一子模式在特定位置之后出现。使用语法 (?!...)

示例: 匹配不跟在 foo 之后的 bar

foo(?!bar)

在字符串 foobaz 中,将匹配 foo,因为 foo 后面没有 bar

后顾(Lookbehind)

正后顾(Positive Lookbehind)

正后顾用于确保某一子模式在特定位置之前出现,但不包含在最终匹配中。使用语法 (?<=...)

示例: 匹配 bar,但要求 bar 之前是 foo

(?<=foo)bar

在字符串 foobar 中,将匹配 bar,但不包括 foo

负后顾(Negative Lookbehind)

负后顾用于确保某一子模式在特定位置之前出现。使用语法 (?<!...)

示例: 匹配不跟在 foo 之前的 bar

(?<!foo)bar

在字符串 bazbar 中,将匹配 bar,因为 bar 前面没有 foo