楽しい正規表現講座第0回「正規表現とは」

唐突に始まる講座シリーズ。

今回から、正規表現について解説していこうと思う。

これは、これまで解説していたようなHTML、CSSなどと違いプログラミング言語ではない

しかし、覚えておくと非常に便利なものの一つだ。

これができると、例えば…HTMLでオプションのついたタグだけを探し出したりできる。

エディタによっては、一括でこの条件に該当するものを全て○○するといった置換も可能なので、覚えておいて損は一切ない。

今回は、まずそもそも「正規表現って何?」というところを見ていく。また、簡単な例もお見せしよう。

スポンサーリンク

正規表現とは

簡単に言ってしまうと、正規表現は「文字列を表現するパターン」だ。これだけではわかりづらいだろう。

例を出そう。

文字列を渡して、それがファイル名かどうか判定したい…つまり、拡張子がついているかどうかを見たいとする。

拡張子とは、ファイル名の後ろについているドット○○という3~4文字くらいの文字列のことだ。

で、この「ドット○○というものが最後につく文字列」を正規表現で表すと、以下のようになる。例なので、わけがわからなくても問題ない

^.*\.[^\.]+$

これに対し、実際に文字列を照らし合わせて、その正規表現に合致するかどうかを調べるのだ。

例えば、この正規表現に「sample.txt」を照らし合わせると、合致する。下線部が拡張子だ。

また、例えば「新しいテキスト ドキュメント」を照らし合わせると、合致しない。この文字列には、拡張子がない。

このように、文字列が「ある条件に従っているか」を判定するものが正規表現だ。あるいは、その条件の書き方が正規表現である、と言ってもいい。

具体的な内容がわからないとピンと来づらいかもしれない。早速、内容の解説に入ろう。

簡単な正規表現を使う方法

すまない、もう一つ解説することがあった。

この正規表現を、どこで使うかだ。

Winodwsの人は、Windows PowerShellというものを使おう。

Windowsキー」+「R」を押すと、「ファイル名を指定して実行」というウィンドウが左下隅に立ち上がる。

そこに、「powershell」と入力して「Enter」キーを押せば、青い画面のPowerShellが立ち上がる。

ここに、以下のような形式で入力を行っていく。

echo '調べたい文字列' | Select-String -Pattern '正規表現'

これで、調べたい文字列が正規表現に合致すれば、その文字列が表示される

ここでやっているのは、echoで文字列を表示し、「|」で後ろの命令に渡す。その後ろ、Select-String -Patternで正規表現によるパターンマッチングをしている。

もしLinux環境があれば、

echo "調べたい文字列" | grep -e '正規表現'

で判定できる。正規表現に合致すれば、文字列が表示される。やっていることも、ほぼPowerShellと同じだ。ただし、Linux環境では一部の正規表現の書き方に違いがある。注意しよう。ここからは、申し訳ないがWindowsのPowerShellを使用する場合で解説する。

試しに、以下のようなコマンドを実行してみて欲しい。

echo 'sample.txt' | Select-String -Pattern '^.*\.[^\.]+$'

sample.txt」という文字列が表示されればOKだ。

特定の文字列が入っているかを探す

まずは簡単な例だ。特定の文字列が入っているかどうかを探してみよう。

これは単純で、その文字列をそのまま正規表現としてあげればいい。

例えば、「sample」という文字列が入っているか確認したければ、正規表現は

sample

となる。

実際に確かめてみよう。以下を実行してみてほしい。

echo 'sample.txt' | Select-String -Pattern 'sample'
echo 'example.txt' | Select-String -Pattern 'sample'

出力結果
sample.txt
(出力なし)

どうだろうか、上手くいっただろうか。

上の例では、「sample.txt」というように、「sample」という文字列が入っているので、パターンに合致し、結果が表示された。

しかし、下の例では「example.txt」となっており、「sample」という文字列がない。そのため、パターンに合致しなかったのだ。

これだけでは味気ない。もうちょっと凝ってみよう。

複数のいずれかに一致するものを探す

次は、複数の選択肢から、いずれかに一致するものを取得してみよう。

パターンは、以下のようになる。

(sample|example)

これで、「sample」、「exampleいずれかが含まれている場合、というパターンになる。

このように、小括弧「(」と「)」で選択肢を囲み、その選択肢一つ一つをバーティカルバー「|」で区切ると、選択肢の中のいずれかに合致するパターンとすることができる。

では、実際に確かめてみる。以下2つを実行してみよう。

echo 'sample.txt' | Select-String -Pattern '(sample|example)'
echo 'example.txt' | Select-String -Pattern '(sample|example)'

出力結果
sample.txt
example.txt

これで、両方出てきた。

さらに、書き換えてみる。異なるのは先頭の部分だけなので、以下のように変えてみよう。

(s|ex)ample

こう書くと、まず「s」もしくは「ex」、そして後ろに「ample」が続く文字列…つまり、「sample」と「exampleいずれかが入った文字列が合致するようになる。

同じように実行してみよう。

echo 'sample.txt' | Select-String -Pattern '(s|ex)ample'
echo 'example.txt' | Select-String -Pattern '(s|ex)ample'

出力結果
sample.txt
example.txt

これでも、問題なく動くはずだ。

まとめ

いかがだっただろうか。まずは導入ということで、そもそも正規表現とは何かと、ごく簡単な例を紹介した。

テキストエディタをメモ帳以外のものを使っている場合は、これで文字列検索ができたりもする場合があるので、よかったら使ってみて欲しい。

次回は、任意の文字を表す表現をやろうと思う。

更新情報はTwitterでも呟いているので、よかったら覗いていってほしい。画面下部のTwitterアイコンから覗ける。

それでは。

コメント

  1. […] 楽しい正規表現講座第0回「正規表現とは」 […]

タイトルとURLをコピーしました