0

我正在使用带有 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。我在这里想念什么?

4

3 回答 3

2

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

def str = "Wlkjjf als Wk;lfs fk THIS_WORD dsjf kjd".findAll(/[A-Z_0-9]{2,}/)
于 2013-04-29T17:50:00.080 回答
1
  • 表示 0 或更多,而 + 表示 1 或更多。要执行 2 或更多,您需要在 [] 之后使用 {MIN,MAX} 语法

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

http://groovyconsole.appspot.com/了解了一些关于 groovy 和在 groovy 控制台上进行测试后,我发现这很有效。​</p>

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

于 2013-04-29T17:52:54.740 回答
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/)
于 2013-04-30T04:25:01.057 回答