web-dev-qa-db-ja.com

正規表現を使用して文字列内のパターンのすべての一致を見つける方法

次のような文字列がある場合:

s = "This is a simple string 234 something else here as well 4334

そして次のような正規表現:

regex = ~"[0-9]{3}"

その正規表現を使用して文字列からすべての単語を抽出するにはどうすればよいですか?この場合 234および433

12
birdy

CharSequence.findAllを使用できます。

def triads = s.findAll("[0-9]{3}")

assert triads == ['234', '433']

CharSequence.findAllの最新のドキュメント

21
tim_yates

キャプチャグループを使用する必要があります。あなたはそれについてgroovyのドキュメントをチェックすることができます:

http://mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html

たとえば、次のコードを使用できます。

s = "This is a simple string 234 something else here as well 4334"
regex = /([0-9]{3})/

matcher = ( s=~ regex )

if (matcher.matches()) {
    println(matcher.getCount()+ " occurrence of the regular expression was found in the string.");
    println(matcher[0][1] + " found!")
}

補足として:

m[0] is the first match object.
m[0][0] is everything that matched in this match.
m[0][1] is the first capture in this match.
m[0][n] is the n capture in this match.
10
Federico Piazza

このようなことができます。

def s = "This is a simple string 234 something else here as well 4334" 
def m = s =~ /[0-9]{3}/
(0..<m.count).each { print m[it] + '\n' }

出力動作デモ

234
433
7
hwnd