文字列の集合を表す汎用的な記法です。
正規表現などで表される文字列に合致する文字列を探すことを、パターンマッチと言います。 Java、Perl、Ruby、Python などの言語は正規表現を扱うことができるため、 パターンマッチを行うプログラムを容易に作成することができます。
利用する文字とパターン
メタ文字
正規表現では「メタ文字」という特殊な意味を持つ文字を使います。
種類 | 説明 |
---|---|
. | なんでもいい1文字 |
^ | 行の先頭 |
$ | 行の最後 |
[ ] | 指定する文字を囲む |
* | 文字の繰り返し:直前の文字がないか、直前の文字が1個以上連続する |
+ | 文字の繰り返し:直前の文字が1個以上連続する |
? | 文字の繰り返し:直前の文字がないか、1つだけある |
| | いずれかの文字 |
( ) | 検索できる文字をグループ化する |
構文一致
種類 | 説明 |
---|---|
X? | X、1 または 0 回 |
X* | X、0 回以上 |
X+ | X、1 回以上 |
X{n} | X、n 回 |
X{n,} | X、n 回以上 |
X{n,m} | X、n 回以上、m 回以下 |
|X??|X、1 または 0 回。条件に合う最短の部分に一致する|
メタ文字の検索
メタ文字自体を検索できるようにするには、文字の前に\を付加するか、[]で囲みます。
\. \[ \] \* \+ \? \| \( \)
行頭「^」と行末「$」自体を検索したい場合は2つ記述します。
^^ $$
利用例
なんでもいい1文字「.」
正規表現 | 検索できる例 |
---|---|
私は.です | 私は鳥です 私は馬です 私は0です |
私は...が.. | 私はうどんが嫌い 私は早起きが苦手 |
同じ文字の繰り返し「*」
直前の文字がないか、直前の文字が1個以上連続する
正規表現 | 検索できる例 |
---|---|
おー*い | おい おーい おーーーーい |
同じ文字の繰り返し「+」
直前の文字が1個以上連続する
正規表現 | 検索できる例 |
---|---|
おー+い | おーい おーーい おーーーーい |
同じ文字の繰り返し「?」
直前の文字がないか、1つだけある
正規表現 | 検索できる例 |
---|---|
おー?い | おい おーい |
Window? | Windows Window |
Window ?98 | Windows98 Windows 98 |
メタ文字の検索
正規表現 | 検索できる例 |
---|---|
TEST\.LOG | TEST.LOG |
[^^A] | ^とA以外の文字 |
[[A10] | [,A,1,0のいずれか |
[A\]] | A,]のいずれか |
※[ ] の中の先頭文字 ^ に続く ^ はその文字自体を否定します。
※[ ] の中で [ ] の文字を指定する場合は、[ はそのままで問題ありませんが、] の場合は ] と記述しないと誤検索します。
組み合わせた利用
正規表現 | 検索できる文字 |
---|---|
[0-9;F]* | 0-9の数字と;とFを*回以上繰り返す |
^[0-9]{2}[;A-Z]* | 行頭が0-9、2文字目が0-9、3文字目が;A-Zがないか・1回以上繰り返す |
[A-Z][0-9]{3} | 1文字目がA-Z、2文字目~4文字目が0-9 |
(A10)[0-9] | A101、A102、A103などA10と数字 |
^([a-zA-Z0-9]{8,})$ | 8文字以上の英数字 |
(\.co\.jp)$ | 末尾が.co.jp |
A[^A-Z]CCC | 1文字目がA、2文字目に半角アルファベット以外の文字、3文字目CCC |
^[A[\]^*+?|\\()] | 行頭がA,[,],^,*,+?,|,\,(,)のいずれか |
※^は1文字目に持ってくると、メタ文字として認識されます。
参考サイト
サルにもわかる正規表現入門
基本的な正規表現一覧
正規表現を可視化してまとめたチートシート:Qiita
正規表現を入力すると可視化してくれるサイト:regexper