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

标签 regex

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

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

但是,如果我不仅想支持 Python 的三重引号字符串 ("""hello"""),还想支持带有任意数量引号的字符串(只要开头与结尾匹配)怎么办?

("+)(.*?)\1

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

其他应该完全匹配的例子:

  • """hello world"""""(字符串以两个引号结尾)
  • ""hello\""world""(中间有两个引号,但其中一个被转义,另一个不足以单独结束字符串)<

这甚至可以用正则表达式实现吗?

最佳答案

这个怎么样:

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

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

fiddle here .

关于正则表达式匹配 n 引号字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113977/

相关文章:

regex - Google Analytics(分析):用正则表达式排除

用于匹配 "A-Z, a-z, 0-9, _"和 "."的正则表达式

c++ - 如何制作正则表达式。什么都吃?

mysql - REGEX 对非字母数字而非空格有效, '-' 个字符

regex - 用于验证 Solo 借记卡的正则表达式

Javascript:像这样准确地拆分字符串:/kick @Username "reason"但是用户名可以有特殊字符

java - 如何在 Java 中用斜杠替换所有出现的除号?

regex - clojure 相当于 ruby​​ 的 gsub

python - 为什么这个正则表达式匹配给出这个结果?

java - 正则表达式如下