我需要确保字符串不以\'
结尾,所以在后面使用了否定的外观:
\\:'(.+)(?<!\\\\)'
但是,它可以以\\'
结尾。基本上,它可以以'
或'
结尾,后跟反斜杠\
的偶数。
它是用Java实现的。
答案 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上的演示显示未选择以最后一个\
前的奇数'
结尾的行,即无效。