唐突に始まる講座シリーズ。
今回から、正規表現について解説していこうと思う。
これは、これまで解説していたような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アイコンから覗ける。
それでは。
コメント
[…] 楽しい正規表現講座第0回「正規表現とは」 […]