Java:正規表現(java.util.regex)
技術ドキュメント目次 -> Java -> 正規表現(java.util.regex)本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。
◆ はじめに
JDK1.4から、java.util.regex パッケージが導入され、正規表現のクラスが標準で使用できるようになりました。
たとえば Web開発での文字列チェックなど、
さまざまな用途で非常に有用だと思いますので、ぜひチャレンジしてみてください。
◆ サンプルプログラム
サンプルのために、正規表現の utilクラスである RegexUtil と、
RegexUtil のデモのために作成した RegexUtilDemo というクラスを作成しました。
次の3種の文字列操作を行うときの参考にしていただければ幸いです。
・パターンマッチ
・文字列の分割
・文字列の置換
それぞれのソースコードは次のとおりです。
(RegexUtil.java)
/* * Copyright (C) 2006 Slogical Corporation */ import java.util.regex.*; public class RegexUtil { /** * パターンマッチのテストを行い、結果を booleanで返す。 */ public boolean regMatch(String p, String s) { Pattern pattern = Pattern.compile(p); Matcher matcher = pattern.matcher(s); return matcher.matches(); } /** * パターンマッチのテストを行い、結果を booleanで返す。 * 大文字小文字の区別は行わない。 */ public boolean regMatchIC(String p, String s) { Pattern pattern = Pattern.compile(p, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(s); return matcher.matches(); } /** * 文字列を分割して、結果を String[] で返す。 */ public String[] regSplit(String p, String s) { Pattern pattern = Pattern.compile(p); return pattern.split(s); } /** * 文字列を分割して、結果を String[] で返す。 * 分割数の上限指定も行う。 */ public String[] regSplit(String p, String s, int limit) { Pattern pattern = Pattern.compile(p); return pattern.split(s, limit); } /** * 文字列の置換を行い、置換された文字列を返す。 * 最初にマッチしたものしか置換しない */ public String regReplaceFirst(String p, String r, String s) { Pattern pattern = Pattern.compile(p); Matcher matcher = pattern.matcher(s); return matcher.replaceFirst(r); } /** * 文字列の置換を行い、置換された文字列を返す。 * マッチするものはすべて置換する */ public String regReplaceAll(String p, String r, String s) { Pattern pattern = Pattern.compile(p); Matcher matcher = pattern.matcher(s); return matcher.replaceAll(r); } /** * 文字列の置換を行い、置換された文字列を返す。 * マッチするものはすべて置換する * matcher.find() を用いて実装する。 */ public String regReplaceAll2(String p, String r, String s) { Pattern pattern = Pattern.compile(p); Matcher matcher = pattern.matcher(s); StringBuffer sb = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sb, r); } matcher.appendTail(sb); return sb.toString(); } } |
(RegexUtilDemo.java)
/* * Copyright (C) 2006 Slogical Corporation */ import java.lang.*; import java.util.regex.*; public class RegexUtilDemo { /** * メイン */ public static void main(String[] args) { RegexUtil rutil = new RegexUtil(); System.out.println("----- パターンマッチのテスト"); System.out.println( rutil.regMatch("^abcd[0-9]$", "abcD1") ); System.out.println("----- パターンマッチのテスト:大文字小文字区別しない"); System.out.println( rutil.regMatchIC("^abcd[0-9]$", "abcD1") ); System.out.println("----- 文字列分割のテスト"); String s1[] = rutil.regSplit(" ", "This is a test."); for (int i=0; i<s1.length; i++) { System.out.println(i + ": " + s1[i]); } System.out.println("----- 文字列分割のテスト:分割数の上限指定"); String s2[] = rutil.regSplit(" ", "This is a test.", 2); for (int i=0; i<s2.length; i++) { System.out.println(i + ": " + s2[i]); } System.out.println("----- 文字列置換のテスト"); System.out.println( rutil.regReplaceFirst("a", "A", "Japan") ); System.out.println( rutil.regReplaceFirst("a", "A", "abcdefaaa") ); System.out.println("----- 文字列置換のテスト:全て置換する"); System.out.println( rutil.regReplaceAll("a", "A", "Japan") ); System.out.println( rutil.regReplaceAll("a", "A", "abcdefaaa") ); System.out.println("----- 文字列置換のテスト:全て置換する:別実装"); System.out.println( rutil.regReplaceAll2("a", "A", "Japan") ); System.out.println( rutil.regReplaceAll2("a", "A", "abcdefaaa") ); } } |
◆ サンプルプログラム実行結果
サンプルプログラムの実行結果は次のようになります。ソースコードとにらめっこしてみてください。
$ java RegexUtilDemo ----- パターンマッチのテスト false ----- パターンマッチのテスト:大文字小文字区別しない true ----- 文字列分割のテスト 0: This 1: is 2: a 3: test. ----- 文字列分割のテスト:分割数の上限指定 0: This 1: is a test. ----- 文字列置換のテスト JApan Abcdefaaa ----- 文字列置換のテスト:全て置換する JApAn AbcdefAAA ----- 文字列置換のテスト:全て置換する:別実装 JApAn AbcdefAAA $ |
■ Java についての他のドキュメント
- Ant
- HttpURLConnection
- Java Mail でのメール送信
- Singletonパターン
- TimerTask
- 正規表現(java.util.regex)
■ 他のグループのドキュメント
Apache / Linux / FreeBSD / OpenSSL / Perl / HTTPプロトコル / Jakarta Tomcat / Java / NetBSD / Oracle / PostgreSQL / UNIX の C言語 / UNIX のコマンド / Windows / bind / システム運用TIPS