正規表現についてのメモ

スポンサーリンク

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

正規表現って?

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

どんな時に使うの?

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

どーやって書くの?

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

記号 説明 マッチする文字
^ 行の先頭 ^2018 2018-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|b abc”
\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}

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

コメント