将字符串与转义序列匹配相当容易:
"(\\.|[^"])*"
但是,如果我不仅支持Python的三引号字符串("""hello"""
),而且只要开头匹配结尾,那么支持任意引号的字符串该怎么办?
("+)(.*?)\1
会这样做,但我失去了对转义序列的支持,因为"hello\"world"
应完全匹配。
应完全匹配的其他示例:
"""hello world"""""
(字符串以两个引号结尾)""hello\""world""
(中间有两个引号,但其中一个是转义的,另一个不足以自行结束字符串)这是否可以使用正则表达式?
答案 0 :(得分:1)
这个怎么样:
^("+)((.*?)(?<!\\)(?:\\\\)*)\1$
我之前有一个更简单的表达式,但它在"hello world \\"
上失败了,所以我更新了lookbehinds,允许在结束引号之前存在偶数个反斜杠,但不允许奇数个反斜杠。使用的正则表达式语法是PCRE。
小提琴here。
答案 1 :(得分:0)