如何" It's big \"problem "
使用正则表达式获取子字符串?
s = ' function(){ return " It\'s big \"problem "; }';
PhiLho.. 144
/"(?:[^"\\]|\\.)*"/
适用于Regex Coach和PCRE Workbench.
JavaScript中的测试示例:
var s = ' function(){ return " Is big \\"problem\\", \\no? "; }';
var m = s.match(/"(?:[^"\\]|\\.)*"/);
if (m != null)
alert(m);
/"(?:[^"\\]|\\.)*"/
适用于Regex Coach和PCRE Workbench.
JavaScript中的测试示例:
var s = ' function(){ return " Is big \\"problem\\", \\no? "; }';
var m = s.match(/"(?:[^"\\]|\\.)*"/);
if (m != null)
alert(m);
这个来自许多Linux发行版中的nanorc.sample.它用于C样式字符串的语法高亮显示
\"(\\.|[^\"])*\"
正如ePharaoh所提供的,答案是
/"([^"\\]*(\\.[^"\\]*)*)"/
要将上述内容应用于单引号或双引号字符串,请使用
/"([^"\\]*(\\.[^"\\]*)*)"|\'([^\'\\]*(\\.[^\'\\]*)*)\'/
这里提供的大多数解决方案使用替代的重复路径,即(A | B)*.
您可能会遇到大型输入上的堆栈溢出,因为某些模式编译器使用递归实现此操作.
例如Java:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993
像这样的东西:
"(?:[^"\\]*(?:\\.)?)*"
或者Guy Bedford提供的那个将减少解析步骤的数量,避免大多数堆栈溢出.
"(?:\\"|.)*?"
交替\"
和.
传递转义的转义,而惰性量词*?
确保您不会超过引用字符串的末尾.适用于.NET Framework RE类
/"(?:[^"\\]++|\\.)*+"/
直接从man perlre
安装了Perl 5.22.0的Linux系统上获取.作为优化,这个正则表达式使用两者的'posessive'形式+
并*
防止回溯,因为事先已知在没有结束引用的字符串在任何情况下都不匹配.