ふみぽん's diary

技術的な備忘録が主のブログ

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