Java実践 正規表現の活用
正規表現の活用についての備忘録
正規表現の活用
正規表現の基本文法
1.通常の文字:その文字でなければならない
String text = "Fumi" text.matches("Fumi") // => true text.matches("fumi") // => false text.matches("FumiFumi") // => false
2.ピリオド「 . 」:任意の1文字であれば良い
パターン中にピリオド記号が含まれている場合は、 その部分には任意の1文字(なんでもいいので必ず1文字)があれば良いという意味する。
"World".matches("Wor.d") // => true
3.アスタリスク「 * 」:直前の文字の0回以上の繰り返し
パターン中にアスタリスク記号が含まれていた場合は、 その直前の文字の0回以上の繰り返しを意味する。
"Doooooog".matches("Do*g") // => true "Abcde123".matches(".*") // => true 正規表現 ".*" は、任意の1文字を0回以上繰り返す事を表す text.matches("fu.*"); // fuで始まる任意の文字列( text.startsWith("fu")の代わりになる) text.matches(".*mi"); //miで終わる任意の文字列(text.endsWith("mi")の代わりになる)
4. 波カッコ:指定回数の繰り返し
パターン中に波括弧で囲まれた数字が登場した場合、直前の文字の指定回数の繰り返しを意味する。
"fumi{2}123" => "fumifumi123"
5. 角カッコ:いずれかの文字
パターン中に各括弧( [ ] )で囲まれた部分がある場合、各括弧の中のどれか1文字に当てはまる事を要求する意味となる。
"UR[LIN]" =>「1文字目がU、2文字目がR 、3文字目がLかIかNである事」
6. 角カッコ内のハイフン:指定範囲のいずれかの文字
角カッコ中にハイフン記号がある場合、その両端にある文字を含む範囲の任意の1文字である事を意味する。
"url".matches([a-z]{3}) // => true
↓定義されている文字クラス↓
パターン記号 | 意味 |
---|---|
¥d | いずれかの数字 ([0-9] と同じ) |
¥w | 英字・数字・アンダースコア ( [ a-zA-Z_0-9] と同じ) |
¥s | 空白文字 |
7. ハットとダラー:先頭と末尾
パターン中のハット記号(^)は文字列の先頭を、ダラー記号($)は文字列の末尾を表す。
"^j.*h$" => 「先頭がjで末尾がhの任意の長さの文字列」
おまけ1. split()
メソッド:文字列の分割
split()メソッドを使うと、1つの文字列を複数に分割できる。
String text = "abc, def:ghi" String[] words = text.split("[,:]"); for(String word : words) { System.out.print(word + "->"); } // 実行結果 => abc->def->ghi->
おまけ2.replaceAll()
メソッド:文字列の置換
replaceAll()メソッドを使うと、文字列の中でパターンに一致した箇所を別の文字列に置換できる。
String text = "abc, def:ghi" String word = text.replaceAll("[beh]","X"); System.out.println(word); // 実行結果 => aXc,dXf:gXi