负向回溯断言
负向回溯断言(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" ]