- 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 )
JavaDrive