2013-04-29 144 views
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的 我在这里错过什么?

回答

2

也许你可以使用{2},而不是*让所有的比赛有超过1个字符:

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

卡西米尔,你的意思是像'/([A-Z_0-9] {2,})/'?没有,也不起作用 – rstarter 2013-04-29 17:52:03

+0

@rstarter:你确定你的findall语法是正确的吗?尝试使用:findall(/ [A-Z_09] {2,} /) – 2013-04-29 18:01:09

+0

糟糕...我的findAll {}语法是错误的......应该没有通过它关闭...感谢指出出...接受答案! – rstarter 2013-04-29 18:10:20

1
  • 表示0以上,而一个+表示1以上。要做到2个或更多,你会需要的[]

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

后的学习后使用{MIN,MAX}语法关于groovy和groovy控制台上的测试http://groovyconsole.appspot.com/我发现这个工作。

DEF海峡= “Wlkjjf alkjdfas WK; ljdfs FK THIS_WORD dsklafjf KJD” .findAll(/([A-Z_0-9] {2,})/)
的println STR

+0

亚历克斯我只是做了一个快速检查使用groovy控制台和结果是和空阵[] – rstarter 2013-04-29 17:54:57

+0

亚历克斯你的正则表达式是正确的......我的其他语法其实是错误的事实...谢谢,但会接受卡西米尔的答案,因为他是第一个回答! – rstarter 2013-04-29 18:11:13

1

DEF海峡= “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/)