正規表現(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()
- 前回のマッチで一致した入力部分シーケンスを返す
- public boolean find()
-
Stringクラスのメソッド
- public String replaceAll(String regex, String replacement)
- 指定された文字列(あるいは正規表現)に一致する各部分文字列に対し、指定された置換を行う
- public String[] split(String regex)
- 文字列を指定された正規表現に一致する位置で分割する
- public boolean matches(String regex)
- 文字列が指定された正規表現と一致するかどうかを判定する
- public String replaceAll(String regex, String replacement)
具体例⓵
電話番号をハイフンで分割
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 黒本