- Home ›
- Java正規表現の使い方 ›
- 複数の候補から選択 ›
- HERE
選択と量指定子の組み合わせ
量指定子である"+"や"*"は選択に対しても適用することができます。その場合、選択の候補のいずれかが繰り返し現れるパターンを定義することが可能です。(量指定子に関しては「任意の文字と繰り返し(量指定子)」を参照して下さい)。
書式は次の通りです。
"(候補1|候補2|..)+" "(候補1|候補2|..)*"
具体的な例で考えてみます。
"(Yes|No)+"
メタ文字の"+"は直前の文字を1回以上繰り返す文字列にマッチします。今回は繰り返しの対象となるものが選択となっていますので、"Yes"か"No"が1回以上繰り返す文字列にマッチするパターンとなっています。
では"s(Yes|No)+e"というパターンがターゲット文字列毎にマッチするかどうかを次に例として記述します。
○ sYese ○ sNoe ○ sYesNoYese × sYesnoe
このように選択に対して繰り返しのメタ文字を指定することで、選択の中の同じ候補が繰り返されるだけではなく、複数の候補のいずれかが繰り返し現れる場合にマッチするパターンを定義することが出来ます。
具体的には次のように記述します。
String str = "No0010101001."; String regex = "No(0|1)+."; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); if (m.find()){ System.out.println("マッチしました"); }else{ System.out.println("マッチしません"); }
上記の場合はマッチします。
サンプルプログラム
では実際に試してみます。
import java.util.regex.Pattern; import java.util.regex.Matcher; class JSample2_1{ public static void main(String args[]){ String str1 = "No01 is Apple"; String str2 = "No12506 is Melon"; String str3 = "No.01 is Banana"; String str4 = "No12.5 is Lemon"; String regex = "No(0|1|2|3|4|5|6|7|8|9)+ is"; Pattern p = Pattern.compile(regex); System.out.println("パターン : " + regex); check(p, str1); check(p, str2); check(p, str3); check(p, str4); } private static void check(Pattern p, String target){ Matcher m = p.matcher(target); if (m.find()){ System.out.println("○ " + target); }else{ System.out.println("× " + target); } } }
ではコンパイルを行った上で実行してみます。
( Written by Tatsuo Ikura )