Java Regex:找到匹配begin和end的单词

时间:2012-05-18 08:55:49

标签: java regex

我是正则表达式的新手,我开始阅读更多关于它们的内容,所以要温柔: - )

我想查找以my("my('开头的所有字词。单词本身可以包含下划线,字符,数字,基本上任何字符。但它应以")')结尾。

所以我尝试了以下内容:

Pattern.compile("_(\"(.*)\")"); // for underscores first, instead of my

Pattern.compile("(my)(\"(.*)\")");

但是这也给了我其他的东西,我也看不出为什么以及在哪里犯错误...

由于

3 个答案:

答案 0 :(得分:2)

如果您想匹配my("xxx")my('xxx')而不是my("xxx'),请尝试以下表达式:

my\((?:"[^"]*"|'[^']*')\)

以下是表达式的简短分类:

  • my\(...\)表示匹配应以my(开头,以)
  • 结尾
  • (?:"[^"]*"|'[^']*')表示由双引号或单引号括起来的字符序列(因此字符类表示“任何字符不是双引号”或“任何字符不是单引号”)

编辑:

表达式(my)("(.*)")的问题是,它是贪婪的,匹配将从my("开始,但由于匹配的")而在最后.*结束任何东西。因此,它会与my("xxx") your("yyy")匹配,因为.*匹配xxx") your("yyy

有关正则表达式的更多信息,请参阅http://www.regular-expressions.info

答案 1 :(得分:0)

在正则表达式中,括号(())实际上是保留字符,因此您需要转义它们。所以这个正则表达式应该可以解决问题:_\\(\"(.*)\"\\)。但是,您还声明要使用my(找到必须开始的字词,必须以")结束。因此,您需要添加如下锚点:^my\\([\"'](.*)[\"']\\)$。这应匹配任何以my("my("'开头并以")')结尾的字符串。

^$是主播。 ^将指示正则表达式引擎从字符串的开头开始匹配,$将指示正则表达式引擎在字符串末尾停止匹配。如果您删除这些锚点,则以下内容将被视为匹配:foo my('...') barmy("...") bar等。

然而,这不会有任何区别,也会匹配my("...')my('...")等字符串。

答案 2 :(得分:0)

使用字边界选项,

\bmy\((["']).*?\1\)(?:\b|$)