正規表現入門その1 基本編(ビギナー入門用)

 

ここでは主に「そもそも正規表現とはなんぞや?」という入門前の方や

「どんなんだったっけ?」と基本があいまいだったり、忘れてしまったビギナー、初心者の方を対象に

正規表現とは何か?の基本的な説明をさせていただきます。

 

本ツールの正規表現!M@STERにも一通りパターンが登録されてますので

ツールを別のウィンドウで開いて実践しながら進められると基本程度はあっさり習得できちゃう・・・かもしれません。

→正規表現!M@STERを別ウィンドウで開く

 

 

正規表現とは?

 

分かりやすい言葉(のつもり)で説明しますと

任意の文字の集合を特殊な文字を使って一つの文字列に表す表記法です。

・・・といってもいまいちイメージがぱっとしませんよね。

 

例えば数千件の顧客リストのデータがあったとします。そこで会社の上司Aから

 

上司A:「リストにxxx@yyy.zzz ってメルアドの顧客情報があるかどうか探して欲しいんだけど」

 

と頼まれたとします。この場合は簡単ですよね。

xxx@yyy.zzzというメールアドレスを検索しておしまいですから。

 

・・・しかし、少々テキトーでいい加減な上司Bから

 

上司B:「う~ん、なんてメルアドだったかなぁ~・・・、控えとくの忘れてたよ~。困ったね~。

確か頭のスペルが t だったな!あと a だったか o だったかが2個、いや3個?4個だったかな・・・続いてたよ。

あ、それとジーメールだった!・・・あれ?ヤフーメールだったかな・・・?どっちだったかな・・・。

まぁどっちかだったのは間違いないよ!そんなかんじだから探しといてね!頼んだYO!」

 

と押しつけられました。・・・実にテキトーであいまいな注文です。

普通はこんなあいまいな情報では検索をかけようにもかけようがない。

・・・しかし、正規表現はそれを可能にします。

 

部下B:「うわ~・・・めんどくさいな~・・・」

正規表現を知らない部下Bくんはメルアドを基準にテーブルを五十音順に並び替え、頭がtで始まるメルアドを探し出し、

a か o が二つ以上続いているgmailかyahooメールがないか、じっくり地道に、目視で探し出そうとました

 

一方で、正規表現が使えるデキる部下Aくんは次のように検索フィールドに入力しました。

 

^t.*?[ao]{2,4}.*?@(gmail\.com|yahoo\.co\.jp)

 

部下A:「40秒で探し出します・・・。カチャカチャカチャカチャカチャカチャカチャ・・・ターン!・・・はい見つかりました。

幸い該当するのは一件のみです。toooking_orz@gmail.com ですね!

 

部下Aくんは40秒どころか30秒足らずで探し出してしまいました。

こうして部下Aくんは「人財」ともてはやされ、重用され、島耕作のように出世していきましたとさ・・・という冗談はさておき。

こんなあいまいな情報を一行の文字列で表現できてしまう・・・それが正規表現なのです。

 

この正規表現を使うことでより自由に、より簡単に、目的の文字を見つけたり、取り出したり、置き換えたりできます。

慣れればまさに魔術師の如く、文字列を思いのままに操ることができるのです!(ちょっと大げさに言ってみる)

 

かつてSDS 940という汎用コンピューター上で動くエディタから始まり、UNIXで普及したと言われる正規表現も

今やOSを問わず様々なプログラム、ソフトウェアで利用できるようになり

パソコンが一家に数台の必須ツールとなった現代において、覚えて得することはあっても損することはありえません。

 

特に最近は、エディタ(メモ帳)はもちろん、ファイル名の変換やファイル検索ソフトなど

一般的な個人でも利用するようなソフトウェアの多くに搭載されてきているので

正規表現はあなたのパソコンをより便利で融通の利く、より頼りになる相棒にしてくれることだと思います。

 

正規表現で使える特殊な文字~メタ文字

 

先ほどの例えで出てきた正規表現をもう一度見てみましょう。

 

^t.*?[ao]{2,4}.*?@(gmail\.com|yahoo\.co\.jp)

 

^ だの .*? だの[ao] だの {2,4} だの意味不明な謎の文字が躍ってますよね。

これら謎の文字こそが、正規表現を正規表現たらしめる特殊文字、その名もメタ文字と言います。

 

メタとは高次な~とか超越した~という意味がありますのでメタ文字は文字を超越した文字といったところでしょうか。

文字を表すための特殊な文字なわけですから確かに超越した文字といえると思います。なんかかっこいいですね。

 

メタ文字は^ $ . * + ? ( ) [ ] { } | などの半角記号でできており、一つ一つが特別な意味を持っています。

これらメタ文字と、通常の文字を組み合わせることによって、正規表現ができるわけです。

 

ちなみに、これらのメタ文字を普通の文字として使いたい場合は、メタ文字の前に¥をつけます。

 

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

 

このように、特殊な文字の前に¥をつけてただの文字としての意味に変えることをエスケープすると言います。

例えの正規表現の終わりあたりに gmail\.com や yahoo\.co\.jp とありましたが、

これもメタ文字である .(ドット)を普通のドットとして認識させるために¥をつけてエスケープしているわけです。

 

また逆に、普通の文字をエスケープする(¥をつける)ことで特別な意味を持たせた文字を

エスケープシーケンス(エスケープ文字)と言います。

 

例えば n に ¥ をつける(エスケープする)ことで 改行(LF)の意味を持つ ¥n があります。(よく使います)

その他、水平タブを表す ¥t や 復帰(CR) の ¥r 、改ページの ¥f (使ったことないけど)などがあります。

 

正規表現においてはさらに、 英数字全て+アンダースコアを表す ¥w それら以外の文字を表す¥W

0から9の数字を表す ¥d に、それ以外の文字¥D空白文字全て(スペース + 特殊文字 「\n\t\r\f」)を表す

¥sそれ以外を表す ¥Sがあります。(※小文字に対して大文字はその否定というわけです)

 

エスケープは英語で escape と書き、逃げる、脱出する、抜け出すなどの意味があります。

また原義は、「外套(cape)を脱ぎ捨て(es)逃げる」 だそうです。

このことを踏まえると、

本来の文字の持つ意味を脱ぎ捨て、本来の制約から抜け出した文字がエスケープ文字。

文字をエスケープするとは、文字の本来持つ意味から抜けだし、新しい意味を持つ文字に変えること。

といったところでしょうか。

 

正規表現は難しくない~意味の説明

 

ところで、何度目かになるこの正規表現を見てどう思われましたか?

 

^t.*?[ao]{2,4}.*?@(gmail\.com|yahoo\.co\.jp)

 

初めて正規表現に触れる方は訳の分からない難解なプログラムのコードのように思われたかもしれません。

しかし実際は難しいものではなく、かなり明確にわかりやすい形で記述されています。

メタ文字の詳しい説明は後述するとして、まとまった塊ごとに軽い感じに翻訳してみますと・・・

 

^t → 先頭に t があるよ!

.*?  → 文字がいくつかあるかもしれないし、ないかもしれないよ!

[ao]{2,4} → a か o が2文字~4文字あるよ!

@ → @があるよ!(※これは正規表現ではなく@そのもの。

(gmail¥.com|yahoo¥.co¥.jp) → gmail.com か yahoo.co.jp のどっちかがあるよ!

 

まとめると

 

^t.*?[ao]{2,4}.*?@(gmail¥.com|yahoo¥.co¥.jp)

→ 先頭に t があって、その後何文字かあるかもしれなくて、それから a か o が2文字~4文字あって、

その後何文字かあるかもしれなくて、@があって gmail.com か yahoo.co.jp が続く文字列だよ!

 

というかんじの意味になるわけですが、どうでしょう?

こうして見てみると初めての方でも

「あ、なんか分かる気がする。思ったより簡単そう」

と思えてくるのではないでしょうか。

 

「正規表現は難しい」

という言葉をよく見かけます。

確かに正規表現は奥深く、突き詰めていくと底が見えない感はあります。

専門的なレベルの方達からは自然と出てくる言葉なのかもしれません。

 

しかし基本から実用レベルの範囲において、この言葉はあまり当てはまらないと私は思います。(個人差はあれども)

「あ~だめ、こういうややこしいの無理!」

と、正規表現の難しげな第一印象だけで最初から諦めてしまったり、

入門とか言いながら、教える気はあるのかと思うようなやたらと小難しく書かれた本や情報を見て

諦めしまった運の悪い人も少なからずいらっしゃるのかもしれません。

 

けれど実際のところ、基本を覚えることは決して難しいことではありません。

特に、当サイトの正規表現チェックツールを使っていろいろ試しながら練習すれば(宣伝)

早い方なら基本程度は一日二日でマスターしてしまうことも普通にあり得ると思います。

 

そしてその基本こそがもっとも重要であり、一番役に立つのです。

 

ここまで読んで下さったあなたも、これを機会にぜひ正規表現をしっかり覚えてみてはいかがでしょうか。

当サイトがきっかけで「正規表現覚えて良かった!」と思っていただけたなら望外の喜びです。

そうなることを祈って応援しています。

 

覚えるべき基本パターンの説明はまた別ページで。