当前位置:  开发笔记 > 编程语言 > 正文

正则引用带引号的带引号的字符串

如何解决《正则引用带引号的带引号的字符串》经验,为你挑选了6个好方法。

如何" 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);



1> PhiLho..:
/"(?:[^"\\]|\\.)*"/

适用于Regex Coach和PCRE Workbench.

JavaScript中的测试示例:

    var s = ' function(){ return " Is big \\"problem\\", \\no? "; }';
    var m = s.match(/"(?:[^"\\]|\\.)*"/);
    if (m != null)
        alert(m);


2> 小智..:

这个来自许多Linux发行版中的nanorc.sample.它用于C样式字符串的语法高亮显示

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



3> 小智..:

正如ePharaoh所提供的,答案是

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

要将上述内容应用于单引号或双引号字符串,请使用

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


请参阅下面的@ MarcAndrePoulin的答案以获得解释.
这是唯一对我有用的,包含1.5个大单引号的,包含99个转义符的字符串的设置。此页面上的所有其他表达式在我的文本编辑器中都出现了溢出错误。尽管此处大多数功能都可以在浏览器中运行,但请记住一些注意事项。小提琴:https://jsfiddle.net/aow20y0L/

4> Marc-André P..:

这里提供的大多数解决方案使用替代的重复路径,即(A | B)*.

您可能会遇到大型输入上的堆栈溢出,因为某些模式编译器使用递归实现此操作.

例如Java:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993

像这样的东西: "(?:[^"\\]*(?:\\.)?)*"或者Guy Bedford提供的那个将减少解析步骤的数量,避免大多数堆栈溢出.



5> 小智..:
"(?:\\"|.)*?"

交替\".传递转义的转义,而惰性量词*?确保您不会超过引用字符串的末尾.适用于.NET Framework RE类



6> ack..:
/"(?:[^"\\]++|\\.)*+"/

直接从man perlre安装了Perl 5.22.0的Linux系统上获取.作为优化,这个正则表达式使用两者的'posessive'形式+*防止回溯,因为事先已知在没有结束引用的字符串在任何情况下都不匹配.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有