#はじめに
皆様、お疲れ様です。
今年の4月に入社した姫川です。
正規表現で忘れてしまってこれなんだっけってなったりしてしまうことがあるの
で正規表現についてまとめていこうと思います。
#正規表現とは
正規表現とは、文字列のパターンを表現する表記法。文字列の検索・置換を行うときに利用される。
通常の文字と、メタキャラクタと呼ばれる特別な意味を持った記号を組み合わせて表記される。例えば「^」という文字は「行頭」、「.」は「任意の1文字」、「+」という文字は「直前の要素の1回以上の繰り返し」を意味する。
正規表現を使えば、文字列を直接指定せず、「特徴」(パターン)を指定することができるため、表記の揺れを吸収して検索を行ったり、複数の異なる文字列を一括して置換したりすることができる。(IT用語辞典e-Words引用)
#正規表現の基本
##位置の指定
文字列の先頭や末尾にあるかどうかなどを指定することができます。
文字 | 意味 |
---|---|
^ | 行の先頭 |
$ | 行の末尾 |
¥A | 文字列の先頭 |
¥Z | 最後に行末文字がある場合、それを除く文字列の末尾 |
¥z | 文字列の末尾 |
¥B | 非単語境界 |
¥b | 単語境界 |
##任意の文字と繰り返し
任意の文字を使用することや、指定した文字が繰り返し出現するようなパターンを作ることができます。
文字 | 意味 |
---|---|
. | 任意の一文字 |
* | 直前の文字が0個以上にマッチする |
+ | 直前の文字が1個以上にマッチする |
? | 直前の文字が0または1個にマッチする |
{n} | 直前の文字にn回マッチする |
{n,} | 直前の文字にn回以上マッチする |
{n,m} | 直前の文字にn回以上m回以下マッチする |
##文字クラス
複数の文字からどれか一つにマッチするパターンを作ることができます。
文字 | 意味 |
---|---|
[abc] | a、b、cのいずれかの文字にマッチ |
[0-9a-zA-Z] | 0~9、a~z、A~Z のいずれかの文字にマッチ |
[^abc] | a、b、c が以外の文字にマッチ |
[a-c[x-z]] | a~c と x~zのいずれかの文字にマッチ |
[a-c&&[b-e]] | a~c 且つ b~eのいずれかの文字にマッチ |
##定義済みの文字クラス
文字クラスの略記。
文字 | 意味 |
---|---|
\d | 0~9のいずれかの文字にマッチ |
¥D | 0~9以外の文字にマッチ |
¥w | 0~9、a~z、A~Z、"_"のいずれかの文字にマッチ |
¥W | 0~9、a~z、A~Z、"_"以外の文字にマッチ |
¥s | 空白文字にマッチ |
¥S | 空白文字以外にマッチ |
##POSIX文字クラス
US-ASCIIでのみ使用できます。
文字 | 意味 |
---|---|
¥p{Lower} | a~z のいずれかの文字にマッチ |
¥p{Upper} | A~Z のいずれかの文字にマッチ |
¥p{ASCII} | すべての ASCII 文字にマッチ |
¥p{Alpha} | a~z、A~Z のいずれかの文字にマッチ |
¥p{Digit} | 0~9のいずれかの文字にマッチ |
¥p{Alnum} | 0~9、a~z、A~Z のいずれかの文字にマッチ |
¥p{Punct} | 句読文字のいずれかの文字にマッチ |
¥p{Graph} | 表示できる文字にマッチ |
¥p{Print} | プリント可能文字にマッチ |
¥p{Blank} | 空白またはタブにマッチ |
¥p{XDigit} | 16 進数字にマッチ |
¥p{Space} | 空白文字にマッチ |
##サンプルソース
実際のプログラミングの中で利用する正規表現の記述例
「12345」が半角数値のみであるかチェックする
public static void main(String args[]) {
//判定する文字列
String str = "12345";
//判定するパターンを生成
Pattern p = Pattern.compile("^[0-9]*$");
Matcher m = p.matcher(str);
//画面表示
System.out.println(m.find());
}
以上です。