JavaでのPattern.compileの使い方とは?パターンで置換・パターンで分割・一致したgroupの取得

- システム
エンジニア - JavaでのPattern.compileの使い方が知りたいです。
- プロジェクト
マネージャー - Pattern.compileの使い方などを説明しますので、一緒に学んでいきましょう。
JavaでのPattern.compileの使い方とは?
今回は、JavaでのPattern.compileの使い方について説明します。Pattern.compileは正規表現をパターンにcompileします。メソッドの定義は以下のようになっています。
1
|
public static Pattern compile(String regex)
|
ここでは、Pattern.compileでcompileした後の、正規表現パターンに一致するかチェック(match/lookingAt/find)、パターンで置換(replaceAll/replaceFirst/replaceLast)、パターンで分割(split)、一致したgroupの取得について紹介します。
JavaでのPattern.compileの使い方に興味のある方はぜひご覧ください。
パターンに一致するかチェック(match/lookingAt/find)
Javaでの正規表現パターンに一致するかチェックする方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.regex.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
// 対象List
ArrayList<String> list = new ArrayList<>(Arrays.asList("abcde","12345","abc123"));
// 正規表現をパターンにcompile
Pattern pattern = Pattern.compile("[a-z]+");
for(String str : list) {
Matcher matcher = pattern.matcher(str);
System.out.println(str);
// matcher()で全体が一致するかチェック
System.out.print("matches():" + matcher.matches() + ", ");
// lookingAt()で先頭が一致するかチェック
System.out.print("lookingAt():" + matcher.lookingAt() + ", ");
// find()で部分一致するかチェック
System.out.println("find():" + matcher.find());
}
}
}
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
abcde
matches():true, lookingAt():true, find():false
12345
matches():false, lookingAt():false, find():false
abc123
matches():false, lookingAt():true, find():false
|
このようにJavaでは、正規表現パターンに一致するかチェックするには、match/lookingAt/findメソッドを使用します。
パターンで置換(replaceAll/replaceFirst/replaceLast)
Javaでの正規表現パターンで置換する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.util.regex.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
// 対象List
ArrayList<String> list = new ArrayList<>(Arrays.asList("abcde","12345","abc123"));
// 正規表現をパターンにcompile
Pattern pattern = Pattern.compile("[a-z]");
for(String str : list) {
Matcher matcher = pattern.matcher(str);
System.out.println(str);
// replaceAll()で一致するパターンをすべて置換
System.out.print("replaceAll():" + matcher.replaceAll(".") + ", ");
// replaceFirst()で一致する先頭パターンを置換
System.out.print("replaceFirst():" + matcher.replaceFirst(".") + ", ");
// 自作のreplaceLast()で一致する末尾パターンを置換
System.out.println("replaceLast():" + replaceLast(str, "[a-z]", "."));
}
}
public static String replaceLast(String text, String regex, String replacement) {
// 引数チェック
if(text == null || text.isEmpty()){
return text;
}
return text.replaceFirst("(?s)(.*)" + regex, "$1" + replacement);
}
}
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
abcde
replaceAll():....., replaceFirst():.bcde, replaceLast():abcd.
12345
replaceAll():12345, replaceFirst():12345, replaceLast():12345
abc123
replaceAll():...123, replaceFirst():.bc123, replaceLast():ab.123
|
このようにJavaでは、正規表現パターンで置換するにはreplaceAll/replaceFirstメソッドを使用します。
パターンで分割(split)
Javaでの正規表現パターンで分割する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.regex.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
// 対象List
ArrayList<String> list = new ArrayList<>(Arrays.asList("1a2b3","4c5d6","7e8f9"));
// 正規表現をパターンにcompile
Pattern pattern = Pattern.compile("[a-z]");
for(String str : list) {
// 正規表現で分割
String[] arr = pattern.split(str);
System.out.println(Arrays.toString(arr));
}
}
}
|
実行結果は以下のようになります。
1
2
3
|
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
|
このようにJavaでは、正規表現パターンで置換するにはsplitメソッドを使用します。
一致したgroupの取得
Javaでの正規表現パターンに一致したgroupを取得する方法を紹介します。実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.util.regex.*;
public class Main {
public static void main(String[] args) throws Exception {
// 正規表現をパターンにcompile
Pattern pattern = Pattern.compile("([a-z]+)-([a-z]+)");
Matcher matcher = pattern.matcher("abc-defg");
// 一致した場合
if (matcher.find()){
System.out.println(matcher.group()); // abc-defg
// 一致した1グループ目
System.out.println(matcher.group(1)); // abc
// 1グループ目の開始index
System.out.println(matcher.start(1)); // 0
// 1グループ目の終了index
System.out.println(matcher.end(1)); // 3
// 一致した2グループ目
System.out.println(matcher.group(2)); // defg
// 2グループ目の開始index
System.out.println(matcher.start(2)); // 4
// 2グループ目の終了index
System.out.println(matcher.end(2)); // 8
}
}
}
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
abc-defg
abc
0
3
defg
4
8
|
- システム
エンジニア - JavaでのPattern.compileの使い方などが理解できました。
- プロジェクト
マネージャー - より理解を深めるために、実際のソースコードで指定してご自身の目で確認してみましょう。
まとめ
いかがでしたでしょうか。JavaでのPattern.compileの使い方について説明しました。Pattern.compileは正規表現をパターンにcompileします。
ここでは、Pattern.compileでcompileした後の、正規表現パターンに一致するかチェック(match/lookingAt/find)、パターンで置換(replaceAll/replaceFirst/replaceLast)、パターンで分割(split)、一致したgroupの取得について紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)