TITLE:間違いだらけの正規表現講座 level 1
#contentsx
* 正規表現って何 [#y1fe8cb8]
そもそも、正規表現って何?というのが最初の疑問だと思います。
非常に単純に言ってしまえば、正規表現とは、
&size(20){「高機能な伏字」};
です。
例えば、「け○っぴ」と書いてあった場合、そこの○にはなんでもいいから1文字が
入るものだと思いますよね。~
逆に言うと、「けろっぴ」「けのっぴ」「けぬっぴ」などが当てはまるのだ、
と理解すると思います。
正規表現もそれと同じです。~
ただし、コンピュータですので、○=1文字、よりももっと複雑な伏字が沢山用意されています。~
そこでややこしい記号の羅列になってしまい、多くの人が敬遠してしまうのでしょうね。~
でも、ただの超高機能な伏字なんだ、と思えばたいして難しくもありません。
* 正規表現には何ができるの? [#o66c9785]
じゃあ、正規表現を覚えると何かよいことがあるの?~
これが次の疑問ではないでしょうか。
率直に言って、テキスト編集をたくさん行う方以外には、あまりメリットはありません。~
また、テキスト編集と言っても、正規表現があなたの代わりに文章を書いてくれたりはしません。
その代わり、定型的なこと、例えば―
- 沢山のテキストファイルから、「」でくくられた部分だけを抜き出したい!
- テキストファイル中のURLっぽい文字列だけを抜き出したい!
- 「\s[数字]」という部分を、全部「(数字)」に置き換えたい!
というような作業は、正規表現を覚えれば、あなたが手でやるのの何万倍も早く、
コンピュータが一瞬で片付けてくれます。
* 準備 [#o7e73c39]
まずは正規表現の練習に使えるものを用意しましょう。~
文章だけで見ていたってちっとも面白くありませんからね。
正規表現が使えるエディタ等ならなんでもいいです。~
ここでは拙作の「正規表現テスター」を使って説明することにします。
* マッチ [#pcf07807]
さて、正規表現の実際の説明に入る前に、用語を一つ覚えてください。~
それは、''「マッチ」''です。
さっき、伏字の例で、「け○っぴ」には、「けのっぴ」「けろっぴ」等が当てはまる、
と言いましたが、それがつまり「マッチする」ということです。~
「正規表現にマッチする」=「正規表現に当てはまる」、と覚えてください。
「『けのっぴ』は『け○っぴ』にマッチする」と言う事ができます。
* 最初の記号 - 「.」 [#f332965c]
さて、今日は最初の記号を1つ覚えて終りにしましょう。~
最初の記号は、「.」です。「.」は半角ピリオドですよ。
これは、「なんでもいいから1文字」を表す正規表現です。~
ちょうど、さっきの伏字の例に挙げた、○と一緒ですね。
ですから、最初の例を正規表現で書けば、「け.っぴ」となります。~
そして、正規表現「け.っぴ」には、「けのっぴ」や「けろっぴ」がマッチします。~
「1文字」と限定されていますので、「けののっぴ」や「けっぴ」はマッチしません。
* 練習 [#u2f5c43a]
&attachref(./regex1.png,nolink);
では、実際に練習してみましょう。
正規表現テスターを立ち上げて、まずは右側のオプションを、画像と同じようにチェックしてください。~
そして、上の大きなテキストボックスに適当に言葉を入れて、その下、正規表現と書いてある右に、「け.っぴ」と入れてみます。~
できたら、その右の「テスト」ボタンを押してみてください。~
「け.っぴ」にマッチした文字列が、下に表示される筈です。
テキストや正規表現を色々変えて、試してみてください。~
例えば「け..っぴ」にするとどうなりますか。「け.っ.」ではどうでしょうか。
* 実用 [#v7eb2519]
さて、これであなたは、正規表現の記号を1個覚えたわけです。~
例えばエディタで、「○○○○年○○月」という文字列を探したい!というとき…~
もう何をすればいいか分かりますね。~
「正規表現で検索」のような機能を使って、「....年..月」と入れればよいのです。
* ちょっと脱線 [#m259e76c]
ところで、正規表現って、何で「正規表現」って言うんでしょうね。
元の英語では、「regular expression」なのですが、「regular」は、
一定の、とか、通例の、とか、規則正しい、という意味のようです。
日本語の「正規」というのは、規則ではっきり決まっていること、
というような意味のようですので、「規則がはっきり決まった表現」と取れば
意味が分からなくもないのですが…
なんとなく、「正規表現」って言われると、じゃあ正規じゃない、裏ルートの
表現があるのか、という気がしませんか。
* ご指摘などはこちらへ [#hd563d0d]
#comment