代码之家  ›  专栏  ›  技术社区  ›  Ali

与方括号或双引号中的字符串匹配的正则表达式

  •  2
  • Ali  · 技术社区  · 16 年前

    我需要2个简单的Reg exps,它将:

    1. 如果字符串包含在方括号内,则匹配( [] 例如 [word] )
    2. 如果字符串包含在双引号中,则匹配( "" 例如 "word" )
    3 回复  |  直到 16 年前
        1
  •  13
  •   Peter Boughton    16 年前
    \[\w+\]
    
    "\w+"
    


    说明:

    [和]转义特殊括号字符以匹配其文本。

    “w”的意思是“任何单词字符”,通常被认为与字母数字或下划线相同。

    +表示前一项中的一项或多项。

    “是文字字符。


    注意:如果要确保整个字符串匹配(而不仅仅是其中的一部分),请使用前缀 ^ 后缀 $ .


    下一次,你应该能够自己回答这个问题,通过阅读 regular-expressions.info

    更新:

    好吧,根据你的评论,你想知道的是第一个字符是[最后一个]还是第一个和最后一个都是?
    如果是这样,这些将与以下内容匹配:

    ^\[.*\]$    (or ^\\[.*\\]$ in a Java String)
    
    "^.*$"
    

    但是,除非需要对中间字符进行特殊检查,否则只需执行以下操作:

    if ( MyString.startsWith("[") && MyString.endsWith("]") )
    

    if ( MyString.startsWith("\"") && MyString.endsWith("\"") )
    

    我怀疑这比一个正则表达式要快。

        2
  •  2
  •   Community CDub    8 年前

    可能在regex中造成这种困难/不可能的重要问题:

    1. 罐头 [] 嵌套(例如) [foo [bar]] )?如果是这样,那么传统的regex就不能帮助您。Perl的扩展正则表达式可以,但最好编写一个解析器。

    2. 罐头 [ , ] " 出现转义(例如 "foo said \"bar\"" )在绳子里?如果是,请参阅 How can I match double-quoted strings with escaped double-quote characters?

    3. 在您要匹配的字符串中,是否可以有多个这样的实例?如果是这样,您可能希望使用非贪婪量词修饰符(即 ? )要获取匹配的最小字符串: /(".*?"|\[.*?\])/g

    根据评论,你似乎想匹配 "this is a "long" word"

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my $s = 'The non-string "this is a crazy "string"" is bad (has own delimiter)';
    
    print $s =~ /^.*?(".*").*?$/, "\n";
    
        3
  •  0
  •   jSheely    16 年前

    它们是两个独立的表达式吗?

    [[AZ-Z-Z+] ]

    “[AZ-Z-Z+]”

    如果它们在一个表达式中:

    [[\“]+[A-ZA-Z]+[]\”]+

    记住,在.NET中,您需要将双引号“by”转义为