LoginSignup
1
2

More than 1 year has passed since last update.

【Java】正規表現及びその具体例のまとめ

Last updated at Posted at 2021-05-09

正規表現(Regular expression)まとめ

正規表現:
・文字列のパターンをまとめたもの
・不正な文字列がないかの入力チェックを容易に行える

正規表現の数は膨大だが、よく使うものを次節以降にまとめる。

*正規表現すべての一覧はjava.util.regex.PatternクラスのAPIドキュメントに載っている
https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/regex/Pattern.html

パターンの例⓵

パターン文字 意味
xyz xyzという文字列
[xyz] x,y,zのどれか一文字
[^xyz] x,y,z以外のどれか一文字
[a-z] a-z(小文字アルファベット)のどれか一文字
[a-z][A-Z] 小文字アルファベットまたは大文字アルファベットのどれか一文字
[a-zA-Z] ↑に同じ

パターンの例②(数量子)

数量子…任意の数の文字を表現する

パターン文字 意味
x? xが0または1回
(例:"ax?z" -> "az" or "axz")
x* xが0回以上
(例:"ax*z" -> "az", "axxxxxz" etc)
x+ xが1回以上
(例:"ax+z" -> "axz", "axxxxxz" etc)
x{n} xがn回
(例:"ax{3}z" -> "axxxz")
x{n,} xがn回以上
(例:"ax{3,}z" -> "axxxz", "axxxxxz" etc)
x{n,m} xがn回以上m回以下
(例:"ax{3,4}z" -> "axxxz" or "axxxxz")

パターンの例⓷(定義済み文字列)

定義済み文字列…[a-z]や[0-9]といった文字集合を省略して表記

パターン文字 意味
. 任意の文字
\d 数字[0-9]
\D 数字以外[^0-9]
\s 空白文字[\t\n\x0B\f\r]
\S 空白文字以外[^\s]
\w 単語構成文字[a-zA-Z_0-9]
\W 単語構成文字以外[^\w]

Javaで正規表現を用いる具体例

具体的なメソッドの例

  • クラスPatternのメソッド

    • static Pattern compile(String regex)
    • 指定された正規表現をPatternにコンパイルする
  • クラスMatcherのメソッド

    • public boolean find()
      • 入力シーケンスからこのパターンとマッチする次の部分シーケンスを検索する
    • public String group()
      • 前回のマッチで一致した入力部分シーケンスを返す
  • Stringクラスのメソッド

    • public String replaceAll​(String regex, String replacement)
      • 指定された文字列(あるいは正規表現)に一致する各部分文字列に対し、指定された置換を行う
    • public String[] split​(String regex)
      • 文字列を指定された正規表現に一致する位置で分割する
    • public boolean matches​(String regex)
      • 文字列が指定された正規表現と一致するかどうかを判定する

具体例⓵

電話番号をハイフンで分割

public class ApiSample {
    public static void main(String[] args) {
        String str = "000-0000-0000";
        String[] str2 = str.split("-");
        for(String s :str2) {
            System.out.println(s);
        }
    }
}
実行結果
000
0000
0000

具体例②

文字のみを取り出したい

public class ApiSample {
    public static void main(String[] args) {
        String str = "a. b. c. b. e";
        String[] str2 = str.split("\\.\\s");
        for(String s :str2) {
            System.out.println(s);
        }
    }
}
実行結果
a
b
c
d
e

具体例⓷

アルファベット以外の文字で分割

public class ApiSample {
    public static void main(String[] args) {
        String str = "abc$de@fgh0ijk^lmn";
        String[] str2 = str.split("[^a-zA-Z]");
        for(String s :str2) {
            System.out.println(s);
        }
    }
}

実行結果
abc
de
fgh
ijk
lmn

おわりに

参考書籍:Java SE8 Silver 黒本

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2