正規表現

初心者の正規表現

More than 1 year has passed since last update.


はじめに

この記事は正規表現全く分からない....という方をメインとしています。

"厳密にはそうじゃないんだけどなぁ"というのが有るかもしれませんが、正規表現の導入の部分なので多目に見ていただきたいと思います。


正規表現 とは

wikipediaを見ると


正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。 正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。 まれに正規式と呼ばれることもある。

正規表現


と、書かれていますがよくわからないと思います。

簡単に言うと

効率よく検索出来る言語のようなものです。


正規表現で使用する特殊文字


. \ ^ $ [ ] ( ) * + ? |

正規表現を利用するためにこれらのメタ文字というものを使用します。


[ . ]なにか1文字

何らかの文字1文字だけ表現するときに " . " を使います。


これは . です。

これはです。

これはです。


これは ... です。

これはコップです。

これはマウスです。


[ * ]直前の文字を0文字以上繰り返す

直前の文字を0文字以上繰り返すときに" * "を使います。

0文字以上なので直前の文字がなくてもいいのです。


あれはコー * ヒーですか?

あれはコヒーですか?

あれはコーヒーですか?

あれはコーーーーーーーヒーですか?

※ワイルドカードの意味とは異なりますので間違いないようにしてください


[ + ]直前の文字を1文字以上繰り返し

直前の文字を1文字以上繰り返すときに" + "を使います。

1文字以上なので直前の文字が必ず必要です。


メー + ルがきてますか?

メールがきてますか?

メーーーーールがきてますか?

※ " + "は1文字以上の繰り返しなのでメルーとはならないので注意してください


[ ? ]直前の文字が0文字か1文字か

直前の文字を0文字か1文字だけ繰り返すときに" ? "を使います。


windows ? PC持ってる?

windowPC持ってる?

windowsPC持ってる?


[ [] ]中に書いてある文字のどれか

いずれかの文字に当てはめたいときに使います。


今日は[傘鞄靴]を持ってきてください。

今日はを持ってきてください。

今日はを持ってきてください。

今日はを持ってきてください。

※[]に書かれているものだけなので、

今日は__服__を持ってきてください。は当てはまりません。


[ () ]複数文字単位でまとめる

今まで一文字単位での処理しかしていませんでした。

なので複数文字を処理したいときは()を使ってまとめることが出来ます。


(かわいい)猫が欲しい

と、()の内部を1文字のようにまとめることが出来ます。


(かわいい) * 猫が欲しい

とすると

直前の文字、()が0文字以上繰り返しなので

猫が欲しい

かわいい猫が欲しい

かわいいかわいい猫が欲しい

ということになります。


[ . ][ * ]組み合わせて1

何らかの文字1文字だけ表現するときの[ . ]と

直前の文字を0文字以上繰り返すときの[ * ]を掛けあわせて使います。


携帯、持 ...*

携帯、持って

携帯、持つの??????

※[ . ]が3つなので、何かしらの文字が3文字。

ですが、[ * ]が直前の文字を0文字以上ということなので2文字以上の文字ということになります。

よって

携帯、持つ はダメです。


[ () ][ ? ]組み合わせ2

複数の文字をまとめる()と

直前の文字を0文字か1文字繰り返す?を使います


この(コーヒー) + 豆を焙煎しておいて

この豆を焙煎しておいて

このコーヒー豆を焙煎しておいて

直前のコーヒーを0文字か1文字だけ繰り返すので

このコーヒーコーヒー豆を焙煎しておいてでは間違いになります。


参考

サルにもわかる正規表現入門