负向回溯断言

负向回溯断言(Negative Lookbehind Assertion)是正则表达式中的一种特殊构造,用于在匹配文本时指定一个条件,该条件表示所匹配的文本之前不应该出现某种模式。换句话说,负向回溯断言用于排除某些不希望出现的情况。

负向回溯断言的语法是 (?<!...),其中 ... 是一个正则表达式,表示不应该出现在匹配文本之前的模式。如果在这个位置找到了与 ... 匹配的文本,那么整个正则表达式匹配将失败。

以下是一个示例,假设我们要查找不包含特定单词 "apple" 的句子:

正则表达式:(?<!apple\s)\w+

  • (?<!apple\s) 是负向回溯断言,它指示匹配文本之前不应该有 "apple" 后跟一个空白字符的模式。
  • \w+ 匹配一个或多个单词字符(字母、数字、下划线)。

使用这个正则表达式,它会匹配句子中不包含 "apple" 的单词。

负向回溯断言对于需要排除某些情况的复杂文本匹配非常有用,它允许你在匹配时精确指定不希望出现的模式,从而更精确地控制匹配结果。

请注意,不是所有的正则表达式引擎都支持负向回溯断言,具体取决于所使用的编程语言和正则表达式库。

 


示例: Phoenix (Elixir) 中将 input 用不以 @开头的 .  分割。

input = "test1.test2.test3[?(@.test7 == 'test4')].test5.test6"

String.split( input,  ~r/(?<!@)\.)

结果:[ "test1",  "test2",  "test3[?(@.test7 == 'test4')]",  "test5",  "test6" ]

posted @   How_Many  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示