正则表达式使用正则表达式查找子字符串

时间:2013-04-29 17:46:57

标签: regex grails groovy

我正在使用带有Groovy(Grails)的正则表达式来查找子字符串,该字符串是大写字母,下划线和数字的组合。

正则表达式

"THIS_WORD" ==~ /([A-Z_0-9]*)/

返回true ( 但是以下声明

def str = "Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll{([A-Z_0-9]*)/}
println str

返回[W, W, T, H, I, S, _, W, O, R, D]

我只需要单词THIS_WORD而不是重复两次的字母W. 我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

也许您可以使用{2,}而不是*来获得超过1个字符的所有匹配:

def str = "Wlkjjf als Wk;lfs fk THIS_WORD dsjf kjd".findAll(/[A-Z_0-9]{2,}/)

答案 1 :(得分:1)

  • 表示0或更多,而a +表示1或更多。要做2个或更多,你需要在[]
  • 之后使用{MIN,MAX}语法
  

([A-Z0-9 _] {2,})

http://groovyconsole.appspot.com/了解了groovy并在groovy控制台上进行测试后,我发现这很有效。

  

def str =“Wlkjjf alkjdfas Wk; ljdfs fk THIS_WORD dsklafjf kjd”.findAll(/([A-Z_0-9] {2,})/)
  println str

答案 2 :(得分:1)

  

def str =“Wlkjjf alkjdfas Wk; ljdfs fk THIS_WORD dsklafjf kjd”.findAll {([A-Z_0-9] *)/}

这不编译。也许你的意思是:

"Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll(/[A-Z_0-9]*/)

给出了

[W, , , , , , , , , , , , , , , , W, , , , , , , , , , , , THIS_WORD, , , , , , , , , , , , , , ]

如果你正在寻找所有大写单词,这样的正则表达式会更好:

"Wlkjjf alkjdfas Wk;ljdfs fk THIS_WORD dsklafjf kjd".findAll(/\b[A-Z_0-9]+\b/)