イメージで感じて覚える正規表現 「はじめに」
0 Comments
ひらくん
はじめに
「正規表現をある程度勉強し、それなりに使ってはいるけどいまいちわからない」
という気持ちをお持ちの方は結構いると思います。持論ではありますが、それらの方に共通しているのは知識は十分あるのですが正規表現に対するイメージが足りていないように感じます。
正規表現に対するイメージというのは、
「正規表現の最小単位は文字クラスであり、正規表現とはその文字クラスの集合(パターン)である」
ということです。文字クラスとはそのものずばり1文字を表す表現のことです。
よく正規表現の解説でまずは「メタ文字から覚えましょう」というものがあります。たしかにメタ文字を理解することは正規表現をいち早く理解する方法ではありますが、文字クラスとパターンの関係をイメージするステップとしてはあまりふさわしくありません。
そのようなわけでここからは「正規表現はある程度勉強したけどいまいちわからなかった」という方を対象に話しを進めていこうかと思います。
一番大切なのは「[]」をつかうオリジナル文字クラス定義
正規表現を使う上で第一に理解しなければいけないのは文字クラスという概念です。
「文字クラスとは1文字にマッチする表現です」
仮に正規表現として「あいう」を指定した場合「あ」は文字“あ”という1文字にマッチする文字クラスであり、「い」は文字“い”という1文字にマッチする文字クラス、「う」は文字“う”という1文字にマッチする文字クラスです。この3つの文字クラスが集合して「あいう」というパターンを形成しています。「あいう」これも立派な正規表現といえるでしょう。“文字クラスが集合してパターンを作る”これが正規表現のもっとも基本的な考えです。
さて、正規表現の指定子の中に「[]」があります。「[]」は言わずとしれた文字の集合を表す正規表現の記述ですが、これこそがイメージをつかむ上での最重要キャラクタとなります。
「[0-9]」という表現は0~9のいずれかの“一文字にマッチ”する正規表現です。再三述べていますが「一文字にマッチする表現」これを文字クラスと呼びます。
「[]」の中に書かれたいずれかの一文字にマッチする」
この「[]」の中には自分で自由に文字を記述できますので「[]」のことを私は、
“オリジナル文字クラス定義”
と呼んでいます。これを使えば「A~Z」にマッチする文字クラスや「あ~ん」にマッチする文字クラスと、自由自在に定義できます。頑張って全ての文字を入力すればそれこそ全ての文字にマッチする文字クラスなんていうものまで作れてしまいます。。。。ん? そうです全ての文字にマッチする文字クラスなんて自分で作っていられない、そこで前もって「.」ピリオドという全ての文字にマッチする文字クラスが準備されているのです。
「正規表現をある程度勉強し、それなりに使ってはいるけどいまいちわからない」
という気持ちをお持ちの方は結構いると思います。持論ではありますが、それらの方に共通しているのは知識は十分あるのですが正規表現に対するイメージが足りていないように感じます。
正規表現に対するイメージというのは、
「正規表現の最小単位は文字クラスであり、正規表現とはその文字クラスの集合(パターン)である」
ということです。文字クラスとはそのものずばり1文字を表す表現のことです。
よく正規表現の解説でまずは「メタ文字から覚えましょう」というものがあります。たしかにメタ文字を理解することは正規表現をいち早く理解する方法ではありますが、文字クラスとパターンの関係をイメージするステップとしてはあまりふさわしくありません。
そのようなわけでここからは「正規表現はある程度勉強したけどいまいちわからなかった」という方を対象に話しを進めていこうかと思います。
一番大切なのは「[]」をつかうオリジナル文字クラス定義
正規表現を使う上で第一に理解しなければいけないのは文字クラスという概念です。
「文字クラスとは1文字にマッチする表現です」
仮に正規表現として「あいう」を指定した場合「あ」は文字“あ”という1文字にマッチする文字クラスであり、「い」は文字“い”という1文字にマッチする文字クラス、「う」は文字“う”という1文字にマッチする文字クラスです。この3つの文字クラスが集合して「あいう」というパターンを形成しています。「あいう」これも立派な正規表現といえるでしょう。“文字クラスが集合してパターンを作る”これが正規表現のもっとも基本的な考えです。
さて、正規表現の指定子の中に「[]」があります。「[]」は言わずとしれた文字の集合を表す正規表現の記述ですが、これこそがイメージをつかむ上での最重要キャラクタとなります。
「[0-9]」という表現は0~9のいずれかの“一文字にマッチ”する正規表現です。再三述べていますが「一文字にマッチする表現」これを文字クラスと呼びます。
「[]」の中に書かれたいずれかの一文字にマッチする」
この「[]」の中には自分で自由に文字を記述できますので「[]」のことを私は、
“オリジナル文字クラス定義”
と呼んでいます。これを使えば「A~Z」にマッチする文字クラスや「あ~ん」にマッチする文字クラスと、自由自在に定義できます。頑張って全ての文字を入力すればそれこそ全ての文字にマッチする文字クラスなんていうものまで作れてしまいます。。。。ん? そうです全ての文字にマッチする文字クラスなんて自分で作っていられない、そこで前もって「.」ピリオドという全ての文字にマッチする文字クラスが準備されているのです。