- Home ›
 - Java正規表現の使い方 ›
 - 位置の指定 ›
 - HERE
 
単語境界/非単語境界(¥b, ¥B)
文字列の中の単語の境界にマッチするパターンを記述するにはメタ文字の1つである"¥b"を使います。
書式は次の通りです。
"¥bパターン" "パターン¥b"
パターンには"¥b"を除いたパターンを記述します。
単語の境界というのは、単語を構成する文字(a-z、A-Z、0-9、_、Unicode文字)とそうでない文字との境目のことです。次の例を見て下さい。
How are you?
上記の場合で言えば、次の箇所が単語の境界にあたります
行頭と"H"の間 "w"と空白の間 空白と"a"の間 "e"と空白の間 空白と"y"の間 "u"と"?"の間
"¥b"は単語の境界にマッチします。Javaの場合は単語の前や後に関わらず"¥b"にマッチする点に注意して下さい。
具体的な例で考えてみます。"How are you?"と言う2つの文字列に対してパターンを"¥bar"と指定した場合には単語の境界から始まり"ar"と続くかどうかなのでマッチします。
○ How are you?
			同じように"How are you?"と言う2つの文字列に対してパターンを"you¥b"と指定した場合には"you"と続いた後で単語の境界が出現するかどうかなのでマッチします。
○ How are you?
			具体的には次のように記述します。
String str = "How are you?";
String regex = "¥¥byou";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.find()){
  System.out.println("マッチしました");
}else{
  System.out.println("マッチしません");
}
			上記の場合はマッチします。
非単語境界
"¥b"が単語の境界にマッチするのに対して、"¥B"は単語の境界以外にマッチします。
書式は次の通りです。
"¥Bパターン" "パターン¥B"
パターンには"¥B"を除いたパターンを記述します。
"¥b"にマッチする以外の位置にマッチします。
サンプルプログラム
では実際に試してみます。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class JSample5_1{
  public static void main(String args[]){
    String str1 = "How are you?";
    String str2 = "Howareyou?";
    String regex1 = "¥¥bar";
    Pattern p1 = Pattern.compile(regex1);
    String regex2 = "¥¥Bar";
    Pattern p2 = Pattern.compile(regex2);
    String regex3 = "you¥¥b";
    Pattern p3 = Pattern.compile(regex3);
    String regex4 = "¥¥bHow";
    Pattern p4 = Pattern.compile(regex4);
    System.out.println("パターン : " + regex1);
    check(p1, str1);
    check(p1, str2);
    System.out.println("パターン : " + regex2);
    check(p2, str1);
    check(p2, str2);
    System.out.println("パターン : " + regex3);
    check(p3, str1);
    check(p3, str2);
    System.out.println("パターン : " + regex4);
    check(p4, str1);
    check(p4, str2);
  }
  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