072:文字列が複数の正規表現のすべてにマッチするか調べる
お題
文字列が複数の正規表現のすべてにマッチするか調べる
コード
/*「あ」を含むか? */ assert "めぐりあい" =~/あ/ /*「あ」と「い」を両方含むか?*/ assert "めぐりあい" =~/(?=.*?あ).*?い/ assert "いあいあ" =~/(?=.*?あ).*?い/ assert !("IA-64" =~/(?=.*?あ).*?い/) str =""" め ぐ り あい """ assert !(str =~/((?m)=.*?あ).*?い/) /* 指定した文字が含まれるか? */ def rexpAnd (String target,String... regxp){ for ( re in regxp) { if (! (target =~ re)) { return false } } return true } def someMethod(String... re) { result = [] ["ああ", "あい", "あう", "あえ", "あお"].each{ str -> if (rexpAnd(str, re)) { result<< str } } return result } assert someMethod(/う/) == ["あう"] assert someMethod(/あ/,/い/) == ["あい"] assert someMethod(/あ/) == ["ああ", "あい", "あう", "あえ", "あお"]
/(?=.*?あ).*?い/だと改行コードが絡むと上手くいかない。
素直に2回マッチさせた。
添削歓迎
ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバック、はてブ、Twitter @orange_clover宛 で、お願いします。
実行環境
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
問題自体は第2版のもの。
自分で考えるために他言語の例をGroovyで置き換えてる。
が、自分だけで書いてるとGroovyっぽくならいないのが玉にキズ。