正規表現についてのメモ

スポンサーリンク

正規表現について普段よく使うものは頭に入っていますが、少し違ったことをしようとすると「あれ?」となります。そんな自分向けのメモです。

正規表現って?

他人に説明する時には「文字列検索する時のパターンマッチの書き方だよ」と言ってますが、正規表現って正確には何だろう、、、と。
英語ではRegular Expressionsですね。「正規表現」って堅い言い方だとこちらも構えちゃいますが、ゆるく和訳すると「文字列の規則性を表現する方法」ってところでしょうか。

どんな時に使うの?

主にプログラミングで入力されたデータの検査(パターンマッチ)をする場合などに使います。
あとはWEBサーバ(Apacheとか)の設定で「指定のIPアドレスだけアクセス許可したい」とか「/xxx にアクセスが来たら /zzz に飛ばしたい」などででしょうか。
また、ログファイル等のテキストデータに対して、例えば「0〜9までの数字」を検索したい、と言った場合、正規表現で「[0-9]」と検索すればパッと検索できます。
正規表現を使わない場合、0で検索して、1で検索して、、、、10で検索して、と繰り返し検索をする必要が出てきます。(やってられません)
HTMLから<A>タグのリンクを丸ごと抽出する、とかも正規表現でパッとできるようになります。

どーやって書くの?

個人的によく使うもの(と忘れがちなもの)を以下にまとめます。

記号説明マッチする文字
^行の先頭^20182018-10-28 〜”
$行の末尾finish.$“〜finish.
.改行を除く任意の文字(ワイルドカード)/a.c/abc
+直前の1文字が1回以上繰り返しabc+abc“とか“abccc
*直前の1文字が0回以上繰り返しabc*abccc“とか”ab
?直前の文字が0個または1個abc?abc“とか”ab
\次の文字を単純に文字として扱う(エスケープ)\*“a*b”
[ ]カッコ内の1文字[0-9]“abc1
[^ ]カッコ内の1文字以外[^0-9]a1“
( )パターンをグループ化(abc)*abcabc
{n}直前の文字が n 回出現するものx{3}xxxyz“
{m,n}直前の文字が n 回以上、m 回以下出現するものx{1,4}xxxx
|直前、直後いずれかa|babc”
\n改行(LF)
\r改行(CR)
\tタブ
\s空白文字(半角スペース、\t、\n、\r)
\d数字([0-9]と同じ)

よく使うパターン

半角数字

[0-9]

半角英数字

[0-9a-zA-Z]

電話番号

0\d{1,4}-\d{1,4}-\d{4}

なかなか複雑ですが、ぼちぼち覚えていければと。。。

コメント