こちらの記事は、正規表現の備忘録となっております。
正規表現の基礎なので、正規表現が分からない、分かるけどすぐ忘れるなんて方にも参考になると思います。
正規表現について
正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。
– ウィキペディア(Wikipedia)
正規表現には、文字列から特定の文字を「検索」する、文字列の〇〇を△△に「置換」する、〇〇を△△を「比較」するといったことができます。
正規表現を利用することによって、複数あるファイルから〇〇という表現を△△に置き換えるなどの作業が効率的に行えます。
正規表現で使用する特殊文字(メタ文字)
.(ピリオド)
「 . 」・・・改行を除く任意の文字
任意の1文字のあとに「at」とつく単語をマッチさせる場合は、
例) cat hat bat jet
正規表現 :
.at
※メタ文字のピリオドではなくリテラルのピリオドとする場合は、ピリオドの前に\(バックスラッシュ)をつけることによってピリオドをただの文字として処理します。(エスケープ処理)
例) GMO INTERNET GROUP. GMO インターネット グループ.
正規表現 :
\.
\s 、\d 、\w
「\s」・・・すべての非空白文字 スペース・タブ・改行
「\d」・・・すべての数字 0-9
「\w」・・・アルファベット、アンダーバー、数字 a-z、A-Z、_、0-9
※バックスラッシュの後の文字を大文字にすることで以外のという意味になります。
例) GMO INTERNET GROUP. GMO インターネット グループ.
こーでィ 1999/03/21 000-0000-0000
空白をマッチさせる場合は、
正規表現 :
\s
こーでィ 1999/03/21 000-0000-0000
名前 年月日 電話番号の電話番号にだけマッチさせる場合は、
正規表現 :
\d\d\d-\d\d\d\d-\d\d\d\d
こーでィ 1999/03/21 000-0000-0000
a-z、A-Z、0-9、_以外をマッチさせる場合は、
正規表現 :
\W
← 大文字のW
こーでィ 1999/03/21 000–0000–0000
* 、+ 、? 、{}
「 * 」・・・直前の文字が0回以上繰り返す場合にマッチする
「 + 」・・・直前の文字が1回以上繰り返す場合にマッチする
「 ? 」・・・直前の文字が0個か1個の場合にマッチする
「 {n} 」・・・直前の文字の桁数を指定することができる。 n個
「 {min,max} 」・・・直前の文字の最小桁数と最大桁数を指定することができる。 min個以上max以下
「 {min,} 」・・・直前の文字の最小桁数を指定することができる。 min個以上
月と日にちの桁数の違う年月日にマッチさせたい場合は、
例) Aさん:1990/3/1 Bさん:1999/12/25
正規表現 :
\d{4}/\d{1,2}/\d{1,2}
^ 、$
「 ^ 」・・・直後の文字が行の先頭にある場合マッチする
「 $ 」・・・直後の文字が行の末尾にある場合マッチする
例) Aさん 1990/3/1
Bさん 1999/12/25
1999/12/25 Cさん
先頭が名前のものをマッチさせる場合は、
正規表現 :
^\wさん
Bさん 1999/12/25
1999/12/25 Cさん
末尾が日にちのものをマッチさせる場合は、
正規表現 :
\w+$
1999/12/25 Cさん
| 、() 、[]
「 | 」・・・いずれかの条件として使う。
「 ( ) 」・・・文字を1つのまとまりにすることが可能。
「 [ ] 」・・・括弧内のいずれか1文字にマッチする。
例) GMO INTERNET GROUP
GMO インターネット グループ
GMO INTERNET GROUP、GMO インターネット グループどちらにもマッチさせたい場合
正規表現 :
GMO INTERNET GROUP|GMO インターネット グループ
と書いてもマッチさせることは可能ですが、 ( ) を使ってスマートに書くこともできます。
正規表現 :
GMO (INTERNET GROUP|インターネット グループ)
GMO インターネット グループ
例) Aさん 1990/3/1
Bさん 1939/1/25
Cさん 1959/6/22
Wさん 1992/12/23
全ての名前をマッチさせたい場合
正規表現 :
[ABCW]さん
と書いてもマッチさせることは可能ですが、Rさん・Mさん…と名前が増えるたびに括弧内に文字を増やすのは面倒になるので、 – を使ってマッチすることも可能。 A-Wと書くことでAからWまでという意味になります。
正規表現 :
[A-W]さん
Bさん 1939/1/25
Cさん 1959/6/22
Wさん 1992/12/23
また [ ] の直後に ^ を入れることで否定の意味となります。
Wさん以外のものとマッチさせたい場合は、
正規表現 :
[^W]さん
Bさん 1939/1/25
Cさん 1959/6/22
Wさん 1992/12/23
まとめ
今回は基本的な正規表現を書きました。
正規表現は使用する言語によって書き方が異なる場合もあるので、言語別の書き方も今後記事に載せていきたいと思います。