Java正規表現による置換 - Matcher.replaceAll/String.replaceAll使い方例
2010/02/03 18:44Update
正規表現Matcher.replaceAll/String.replaceAllによる置換。
Java正規表現関連記事
Java正規表現 概要
Java正規表現によくあるマッチ パターン
Java正規表現関連クラス APIドキュメント
String (Java 2 Platform SE 5.0)
Pattern (Java 2 Platform SE 5.0)
Matcher (Java 2 Platform SE 5.0)
サンプル
public static void main(String []args) {
String regex = "[0-9]+"; //数字を表す正規表現式
String value = "正規表現123置換456テスト789サンプル"; //文字列
//StringのreplaceFirst、replaceAllによる置換
String ret = value.replaceFirst(regex, "**");
System.out.println(ret); //正規表現**置換456テスト789サンプル
ret = value.replaceAll(regex, "**");
System.out.println(ret); //正規表現**置換**テスト**サンプル
//MatcherのreplaceFirst、replaceAllによる置換
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(value);
ret = matcher.replaceFirst("**");
System.out.println(ret); //正規表現**置換456テスト789サンプル
ret = matcher.replaceAll("**");
System.out.println(ret); //正規表現**置換**テスト**サンプル
//ちょっとした複雑な置換
value = "abc{yyyyMMdd}-{number}";
ret = regexReplace(value);
System.out.print(ret);
}
/**
* "abc{yyyyMMdd}-{number}"のような文字列を"abc現在の日付-3桁の数字"(例:"abc20100203-123")に変換するサンプル
* 即ち:
* {yyyyMMdd}:yyyyMMddのフォーマットの今日の日付に置換される
* {number}:3桁数の数字に置換される
*
*
* @param value "任意文字列{yyyyMMdd}任意文字列{number}任意文字列"(例:"abc{yyyyMMdd}-{number}")
* @return 変換後の文字列(例:"abc20100203-123")
*/
private static String regexReplace(String value) {
String ret = value;
String patternRegex = "(\\{(.*?)\\})";
Pattern pattern = Pattern.compile(patternRegex);
Matcher matcher = pattern.matcher(value);
String expression = null;
String regexPattern = null;
while(matcher.find()){
int group = matcher.groupCount();
if (group == 2) {
expression = matcher.group(1);
regexPattern = matcher.group(2);
try {
SimpleDateFormat sdf = new SimpleDateFormat(regexPattern);
String datevalue = sdf.format(Calendar.getInstance().getTime());
ret = ret.replaceAll("\\Q" + expression + "\\E", datevalue);
} catch (Exception e) {
if (regexPattern.equals("number")) {
int random = (int)Math.floor(Math.random() * (999 - 100 + 1)) + 100 ;
ret = ret.replaceAll("\\Q" + expression + "\\E", String.valueOf(random));
}
}
}
}
return ret;
}
実行結果はソースのコメントとして記述されています。
Sponsored Link
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)