2013-04-29 243 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/) 
相關問題