正規表現について

概要

最近、(私個人のみですが)logなどのデータから探したい文字を探すことが多くなってきました。
ただ、1からデータを見ていくのは一苦労ですし、egrepを用いて探します。
そんなときに役に立つのが「正規表現」なのですが、実際にどういったことができるの?といった部分について、説明していきます。
ここで書く正規表現はgrepで用いたものなので、sedなどの他のコマンド等では変わったりします。ご注意ください。

メタ文字について

メタ文字とは、正規表現にて、特殊な意味を持つ文字のことを指します。
^a ただのキャレットとaですが、これも正規表現だと、「一番先頭にaがある行」を指すことになります。
キャレットのみだと一番先頭の文字の指定になるのですが、[^a]だと「a以外の文字」という意味になったり、特定の条件下では違った意味になったりします。
これを使いこなすことができれば探したい行もすぐに見つけることができるでしょう。

メタ文字一覧

.改行を除く全ての文字。
*0回以上の繰り返し、ない時でもあるときでもヒットする。
+1回以上の繰り返し、ない時はヒットしないが、2回以上でもヒットする。
?0もしくは1回の繰り返し、2回以上はヒットしない。
^行頭の文字指定。
$行末の文字指定。
a|b「|」の左右の文字列のor検索。(a, bのどちらか片方がヒットすれば良い)
\$直後のメタ文字をエスケープする。例であれば$を「行末の文字指定」の意味をなくして、「$」として検索できる。
[abc]カッコ内に指定した文字のうち、いずれかの一文字。例であればabcのどれか一文字。
[a-z]文字クラス内のハイフンによって文字の文字コード上の範囲を指定できる。a-zなら小文字のアルファベット全てにヒット。
[^a]否定の文字クラス。カッコ内で指定したa以外のいずれかの一文字。
ざっくりとですが一覧です。ここから下では実際に使った時にどういった動作をするのか、使用例を挙げていきます。

使用例

.( 改行を除く全ての文字 )

例として「....する」だと、
「スポーツする」「かいものする」「でんわをする」など、「なんでも4文字+する」にヒットします。

*( 0回以上の繰り返し)

例として「あいうえお*」だと
「あいうえお」「あいうえ」「あいうえおお」「あいうえおおお」と、「お」が0個以上あればヒットします。0個なので、ない場合もヒットします。

+( 1回以上の繰り返し)

上記の*では0回でもヒットしましたが、+だとそうはいきません。
同じく「あいうえお+」で検索をかけると
「あいうえお」「あいうえおお」「あいうえおおお」はヒットしますが、「あいうえ」はヒットしません。

?(0もしくは1回の繰り返し)

上記では「お」が何回でもヒットしましたが、なしか1回までを指定したいときは?を使います。
同様に「あいうえお?」で検索をかけると
「あいうえ」「あいうえお」のみがヒットします。

^(行頭の文字指定)

^は一番最初に来る文字の指定ができます。
例として最初に「い」が来る文字を指定します
「^い」で検索をかけると
「いうえお」や「いかすみ」、「いが痛い」などの文字がヒットします。

$(行末の文字指定)

$は一番後ろに来る文字の指定ができます。
今回は「だろう」を行末に来る文字に指定します
「だろう$」で検索をかけると
「そう思うだろう」「そうだろう」などの「~だろう」にヒットします。

|(or検索)

|はどちらか片方が引っ掛かればよい、or検索です。
例として「aかb」を指定します。
「君はチーム(a|b)」で検索すると
「君はチームa」、「君はチームb」のみがヒットします。「君はチームc」などがあってもヒットしません。

\ (エスケープ文字)

メタ文字をエスケープできます。文章の途中に?が入っていたりして、メタ文字としての(0もしくは1回の繰り返し)が使われないようにして、「?」を普通の文字として認識します。
例として「君は花が好き?」と検索したいときには
「君は花が好き\?」とすることで、ヒットさせることができます。

\[\](文字の指定)

[]はカッコ内の文字にのみヒットさせることができます。
[abc]で検索をかけると
「a」「b」「c」のいずれかのみにヒットします。
「+」などと組み合わせるとかなり自由な検索ができます。

\[a-z\](文字範囲の指定)

カッコ内の「-」は、ここからここまでといった範囲指定を行うことができます。
文字コードを参照にしているため、文字コードの若い順から指定すればアルファベットのみや数字のみを検索することができます。
ちなみに上記の[a-z]は小文字のアルファベットのみを参照できます。
例として、数字のみを検索したい時を挙げます。
[0-9]これで検索をかけると
「0」「1」~「9」のみがヒットします。これの応用で電話番号なども検索をかけることができます。

[^a-z](文字範囲の逆指定)

カッコ内の「^」は、「その範囲以外」を表します。
[^0-9]であれば、数字以外の一文字、「a」「A」「あ」などがヒットします。
「0」や「9」はヒットしません。

総括

実際にこういったものは慣れないと難しいことが多いのですが、logやデータなどから探すのには大変重宝します。検索したい文字列を1から探すよりも早く、正確に探すことができますし、少しづつ覚えていって、使いこなせるようになりましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です