「Javaの正規表現でマッチした部分文字列を取得する」の版間の差分

提供: Java入門
移動: 案内検索
(ページの作成:「Javaの正規表現でパターンマッチをするで簡単な正規表現マッチを説明しました。ここでは、マッチした部分文字列を取得す...」)
 
(相違点なし)

2015年3月15日 (日) 18:00時点における最新版

Javaの正規表現でパターンマッチをするで簡単な正規表現マッチを説明しました。ここでは、マッチした部分文字列を取得する方法や複数のマッチを扱う方法について説明します。

読み方

正規表現
せいきひょうげん

概要

正規表現でマッチした部分を取得するには、Matcherのgroup()を利用します。複数のマッチした部分がある場合は、Matcherのfind()とgroup()を利用します。

String s1 = "foo(0)";
String regex = "([0-9]+)";
Pattern p = Pattern.compile(regex);
Matcher m1 = p.matcher(s1);
if (m1.find()) {
	// マッチした部分文字列の表示を行う
	System.out.println( m1.group () );
}

do-while()などでループすると複数マッチを簡単に扱えます。

if (m.find() ) {
	System.out.print ( " はマッチしました。" );
	do {
		// マッチした部分文字列を表示する
		System.out.print ( m.group() + " ");
	} while (m.find() ); // マッチした数だけループする
	System.out.println (  );
}

ソースコード

/*
 * Regex2.java
 * Copyright (C) 2015 kaoru <kaoru@bsd>
 */
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Regex2
{
        public static void show(Matcher m, String s) {
                System.out.print ( s + " " );
                if (m.find() ) {
                        System.out.print ( " はマッチしました。" );
                        do {
                                System.out.print ( m.group() + " ");
                        } while (m.find() );
                        System.out.println (  );
 
                } else {
                        System.out.println ( " はマッチしてません。" );
                }
 
        }
        public static void main(String[] args) {
                String s1 = "foo(0)";
                String s2 = "bar(200)";
                String s3 = "hoge(200) hoge(300)";
                String s4 = "meta(META)";
 
                String regex = "([0-9]+)";
                Pattern p = Pattern.compile(regex);
 
                Matcher m1 = p.matcher(s1);
                show(m1, s1);
                Matcher m2 = p.matcher(s2);
                show(m2, s2);
 
                show(p.matcher(s3), s3);
                show(p.matcher(s4), s4);
        }
}

コンパイル

$ javac Regex2.java

実行例

$ java Regex2
foo(0)  はマッチしました。0
bar(200)  はマッチしました。200
hoge(200) hoge(300)  はマッチしました。200 300
meta(META)  はマッチしてません。

関連項目