/
.*?' #Match until '
(
.*? #Lazy match & capture of everything after the first apostrophe
)
(?<!(?<!\\)\\)' #Match first apostrophe that isn't preceded by \, but accept \\
.* #Match remaining text
/
0
Regex reg = new Regex("(?<!\\\\)'(?<string>.*?)(?<!\\\\)'");
6 回答
版画
这是我的测试用例解决方案:
和我(Perl,但我不使用任何Perl特定的功能,我不认为)证明:
运行此显示:
请注意,开头的初始通配符需要非贪婪 . 然后我使用非回溯匹配来吞噬\和',然后是其他任何不是独立引号字符的东西 .
我认为这个可能模仿编译器的内置方法,这应该使它非常防弹 .
带括号的部分查找非撇号/反斜杠和反斜杠转义字符 . 如果只能转义某些字符,请将
\\.
更改为\\['\\a-z]
,或者其他任何内容 .通过负面看后面:
这适用于JavaScript:
/('|")(?:\\\\|\\\1|[\s\S])*?\1/
它...
匹配单引号或双引号字符串
匹配空字符串(长度为0)
匹配嵌入空格的字符串(
\n
,\t
等)跳过内部转义引号(单引号或双引号)
在双引号内跳过单引号,反之亦然
仅捕获第一个引用 . 您可以使用以下内容捕获$ 2中未加引号的字符串:
/('|")((?:\\\\|\\\1|[\s\S])*?)\1/