正規表現にマッチした部分を取り出す
単語にマッチさせる
特定の文字・文字列の出現回数を調べる
文字の出現頻度を調べる
正規表現は上記などでもやったはずなんだけど、どうもまだ慣れない。
Groovyイン・アクション P65〜P73
「a」で始まる3文字を取り出す
"xxxabcffpat".find(/a../) ===> abc
正規表現がマッチしない場合
"xxx".find(/a../) ===> null
マッチした部分をすべて取り出す
("static int fact(int n){...}" =~ /\w+/).each{println it} static int fact int n ===> java.util.regex.Matcher[pattern=\w+ region=0,27 lastmatch=]
正規表現の「()」にマッチした部分を取り出す
- Rubyのメソッド名らしき部分を抜き出す
("def print(str)" =~/^\s*def\s+([^\s\(]+)/).each{println it[1]} print ===> java.util.regex.Matcher[pattern=^\s*def\s+([^\s\(]+) region=0,14 lastmatch=]
- Javaのメソッド名らしき部分を抜き出す
("static int fact(int n){...}" =~/\s+\w+\s+([^\s\(]+)/).each{println it[1]} fact ===> java.util.regex.Matcher[pattern=\s+\w+\s+([^\s\(]+) region=0,27 lastmatch=]
正規表現の()が複数あり、マッチした部分を全部まとめて取り出す
- まとめて
("xxabcfffpatxxx" =~/(abc)(f+)(\w{3})/).each{println it[1..-1]} [abc, fff, pat] ===> java.util.regex.Matcher[pattern=(abc)(f+)(\w{3}) region=0,14 lastmatch=]
- 各要素
("xxabcfffpatxxx" =~/(abc)(f+)(\w{3})/).each{it[1..-1].each{println it}} abc fff pat ===> java.util.regex.Matcher[pattern=(abc)(f+)(\w{3}) region=0,14 lastmatch=]
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
ページ番号は、この書籍のページ番号
Groovyイン・アクション
posted with amazlet at 10.05.16
問題自体は以下の書籍のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。
Rubyレシピブック 第2版 268の技
posted with amazlet at 10.05.16
Groovyイン・アクションを読むならあった方が便利かな。