正则表达式匹配n引用的字符串

时间:2014-08-04 07:52:32

标签: regex

将字符串与转义序列匹配相当容易:

"(\\.|[^"])*"

但是,如果我不仅支持Python的三引号字符串("""hello"""),而且只要开头匹配结尾,那么支持任意引号的字符串该怎么办?

("+)(.*?)\1

会这样做,但我失去了对转义序列的支持,因为"hello\"world"应完全匹配。

应完全匹配的其他示例:

  • """hello world"""""(字符串以两个引号结尾)
  • ""hello\""world""(中间有两个引号,但其中一个是转义的,另一个不足以自行结束字符串)

这是否可以使用正则表达式?

2 个答案:

答案 0 :(得分:1)

这个怎么样:

^("+)((.*?)(?<!\\)(?:\\\\)*)\1$

我之前有一个更简单的表达式,但它在"hello world \\"上失败了,所以我更新了lookbehinds,允许在结束引号之前存在偶数个反斜杠,但不允许奇数个反斜杠。使用的正则表达式语法是PCRE。

小提琴here

答案 1 :(得分:0)

此表达式与您的所有示例匹配:

("+)(.*[\\"]?.*?)+?\1

请参阅:http://regex101.com/r/jW8iV8/1