正则表达式检查前几个字符的偶数

时间:2019-05-17 23:32:48

标签: java regex

我需要确保字符串不以\'结尾,所以在后面使用了否定的外观:

\\:'(.+)(?<!\\\\)'

但是,它可以以\\'结尾。基本上,它可以以''结尾,后跟反斜杠\的偶数。

它是用Java实现的。

2 个答案:

答案 0 :(得分:2)

唯一的方法

(?<!\\)(?:\\\\)*'$

解释

 (?<! \\ )          # Not an escape behind us, forces only even escapes ahead
 (?: \\ \\ )*       # Any amount of even escapes
 '                  # Quote 
 $                  # EOS

注意-这是一个事实,即使转义符也不会逃避任何事情,因此,为了强制甚至连转义符都在前面,要使用(?<!\\)后面的否定外观。

答案 1 :(得分:0)

将其写为正则表达式以查找不需要的内容,然后将该正则表达式包含在零宽度的负前瞻中。下面的描述使用xxx表示到那时为止正则表达式。

您想在末尾找到\'\\'$

您要在此之前加上偶数个\(?:\\\\)*xxx

在此之前,您不需要\(?<!\\)xxx

允许任何之前的操作:.*xxx

嵌入负前瞻,然后匹配任何内容:^(?!xxx).*$

确保.与换行符匹配(可选):(?s)xxx

全部加起来:(?s)^(?!.*(?<!\\)(?:\\\\)*\\'$).*$

作为Java文字:"(?s)^(?!.*(?<!\\\\)(?:\\\\\\\\)*\\\\'$).*$"

regex101.com上的演示显示未选择以最后一个\前的奇数'结尾的行,即无效。