在 Perl 兼容正则表达式中检测带有双引号和反斜杠转义的双引号括起来的字符串

Detecting a double-quote-enclosed string with double-quote and backslash escaping, in a Perl Compatible Regular Expression

我想用正则表达式检测双引号括起来的字符串。
我这样做很简单:/"[^"]*"/
但这不允许在字符串内使用双引号,因此我理想情况下允许双引号通过像 \" 一样转义它,当然这还需要允许 \ 用于单个反斜杠,否则字符串永远不能以反斜杠结尾。
我怎样才能做到这一点?最好使用与 Perl 兼容的正则表达式。

PS: 无需转义单引号,也不可能用单引号将字符串括起来。

给你:

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

Demo

对于字符串中的每个字符,匹配后跟任何内容的反斜杠或非引号的字符。

如果您需要优化的东西,这里有一个替代方案:

"(?>[^\"]++|\.)*+"

Demo

它基本上使用所有格量词来避免回溯。