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

如何将双引号字符串与转义的双引号字符匹配?

如何解决《如何将双引号字符串与转义的双引号字符匹配?》经验,为你挑选了4个好方法。

我需要一个Perl正则表达式来匹配一个字符串.我假设只有双引号字符串,一个\"是一个文字引号字符,而不是字符串的结尾,并且\是一个字面反斜杠字符,不应该转义引号字符.如果不清楚,一些例子:

"\""    # string is 1 character long, contains dobule quote
"\\"    # string is 1 character long, contains backslash
"\\\""  # string is 2 characters long, contains backslash and double quote
"\\\\"  # string is 2 characters long, contains two backslashes

我需要一个能够识别所有这四种可能性的正则表达式,以及这些可能性的所有其他简单变体,作为有效字符串.我现在拥有的是:

/".*[^\\]"/

但那是不对的 - 除了第一个之外,它不会匹配任何一个.任何人都可以给我一个关于如何处理这个问题的正确方向吗?



1> j_random_hac..:

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

这与Cal的答案几乎相同,但具有匹配包含转义码的字符串的优点,例如\n.

?:字符是否有防止包含的表达式被保存为一个反向引用,但可将它们取出.


这个答案更正确.我测试了更多的字符串,它比@ Cal更好用于像`"\"\'\""`这样的东西.

2> Cal..:

这个怎么样?

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

匹配零个或多个字符不是斜杠或报价或两个斜线或斜线,然后报价


Paul:字符串可以由正则表达式匹配,但是括号表达式(以及任何其他可以任意嵌套的表达式)都不能.

3> Leon Timmerm..:

通用解决方案(匹配所有反斜杠的字符):

/ \A "               # Start of string and opening quote
  (?:                #  Start group
    [^\\"]           #   Anything but a backslash or a quote
    |                #  or
    \\.              #   Backslash and anything
  )*                 # End of group
  " \z               # Closing quote and end of string
  /xms


虽然你可能想省略`\ A`和/或`\ z`--但它们暗示双引号字符串之前或后面都没有任何内容.

4> Hynek -Pichi..:

请参见Text :: Balanced.它比重新发明轮更好.使用gen_delimited_pat查看结果模式和学习形成的.

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