1. Top
  2. Java Tips
  3. 正規表現

Javaの正規表現で文字列を分割、置換え、抽出、検索する

正規表現にはPatternクラスとMatcherクラスを使用する。
import java.util.regex.Pattern;
import java.util.regex.Matcher;



正規表現で文字列を検索 分割 置換え 抽出する

【RegexSample.java】
package test.regex;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author livetp.com
 */
public class RegexSample {

    public static void main(String[] args) {
        
        // 1、対象文字列が正規表現のパターンに適切するかをチェックする。
        // 例:「hello」文字列を含むかをチェックする。
        String targetStr1 = "Java hello world.";
        Pattern pattern1 = Pattern.compile(".*hello.*");
        Matcher matcher1 = pattern1.matcher(targetStr1);
        System.out.println(matcher1.matches());
        System.out.println("----------");
        
        
        // 2、対象文字列を正規表現のパターンで分割する。
        // 例:半角スペースで文字列を分割する。
        String targetStr2 = new String("Java hello world.");
        Pattern pattern2 = Pattern.compile(" ");
        String[] splitStr = pattern2.split(targetStr2);
        for (int i = 0; i < splitStr.length; i++) {
            System.out.println(splitStr[i]);
        }
        System.out.println("----------");


        // 3、正規表現のパターンに適合する文字列を置換える。
        // 例:「hello」文字列を「…」に置換える。
        String targetStr3 = new String("Java hello world.");
        Pattern pattern3 = Pattern.compile("(hello)");
        Matcher matcher3 = pattern3.matcher(targetStr3);
        System.out.println(matcher3.replaceAll("…"));
        System.out.println("----------");

        
        // 4、正規表現のパターンに適合する文字列を抽出する。
        // 例:丸括弧()で挟まれた文字列を抽出する。
        String targetStr4 = new String("(Java) hello (world).");
        Pattern pattern4 = Pattern.compile("\\(.+?\\)");
        Matcher matcher4 = pattern4.matcher(targetStr4);
        List list = new ArrayList();
        while (matcher4.find()) {
            list.add(matcher4.group());
        }
        for (String str : list) {
            System.out.println(str);
        }
        System.out.println("----------");
    }
}


【実行結果】
true
----------
Java
hello
world.
----------
Java … world.
----------
(Java)
(world)
----------



※正規表現のパターンに不定量指定(*, +, ?など)の正規表現が複数個、OR演算子'|' で羅列されていると、容易にjava.lang.StackOverflowErrorを起こせる。特に対象文字列が大量データの場合、正規表現を工夫する必要がある。


ページの先頭へ