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

时间:2009-04-05 15:32:49

标签: java regex

我需要2个简单的reg exps:

  1. 如果字符串包含在方括号([]例如[word]
  2. 中,则匹配
  3. 如果字符串包含在双引号(""例如"word"
  4. 中,则匹配

3 个答案:

答案 0 :(得分:13)

\[\w+\]

"\w+"


说明:

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

\ w表示“任何单词字符”,通常被认为与字母数字或下划线相同。

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

“是文字字符。


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


下次,您应该可以通过阅读 regular-expressions.info

自行回答这个问题。

<强>更新

好的,基于你的评论,你似乎想知道的是第一个字符是[和最后一个]还是第一个和最后一个都是“?” 如果是这样,这些将匹配:

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

"^.*$"

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

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

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

我怀疑它会比正则表达式更快。<​​/ p>

答案 1 :(得分:2)

可能使正则表达式中难以/不可能的重要问题:

  1. []嵌套(例如[foo [bar]])吗?如果是这样,那么传统的正则表达式无法帮助你。 Perl的扩展正则表达式可以,但编写解析器可能更好。

  2. []"可以在字符串中转义(例如"foo said \"bar\"")吗?如果是,请参阅How can I match double-quoted strings with escaped double-quote characters?

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

  4. 根据评论,您似乎希望匹配"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";
    

答案 2 :(得分:0)

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

[[A-ZA-Z] +]

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

如果它们只是一个表达式:

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

请记住,在.net中,您需要使用双引号“by”“