我是正则表达式的新手,我开始阅读更多关于它们的内容,所以要温柔: - )
我想查找以my("
或my('
开头的所有字词。单词本身可以包含下划线,字符,数字,基本上任何字符。但它应以")
或')
结尾。
所以我尝试了以下内容:
Pattern.compile("_(\"(.*)\")"); // for underscores first, instead of my
和
Pattern.compile("(my)(\"(.*)\")");
但是这也给了我其他的东西,我也看不出为什么以及在哪里犯错误...
由于
答案 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('...') bar
,my("...") bar
等。
然而,这不会有任何区别,也会匹配my("...')
和my('...")
等字符串。
答案 2 :(得分:0)
使用字边界选项,
\bmy\((["']).*?\1\)(?:\b|$)