初心者のための正規表現ガイド

Intro To Regex Featured

文章中に繰り返しのパターンを見つけようとしたことがありますか?ブラウザやワードプロセッサの検索機能を使ったことがあるかもしれませんが、もっと複雑なものを見つける必要があるときは、例の干し草の中の針を探すようなものです。

幸いなことに、テキストの中から文字単位で正確なパターンを拾い出す方法があります。それを正規表現(RegEx)と呼び、テキスト内を検索する達人になることができます。

さらに読む: 日常業務の生産性を向上させるための正規表現の使用方法

RegExはどこで使えますか?

UnixやLinuxが人気をもたらしましたが、正規表現はMicrosoft Wordを含むさまざまなパッケージで利用できます。

regular-expressions

正規表現は、grepAwkSedなどのいくつかの著名なLinuxプログラムで特に使用されます。

たとえば、PC上のUSBデバイスをチェックしたい場合、lspciを使用するとすべてのデバイスのリストが表示され、USBエントリを自分で見つける必要があります。代わりに、USBデバイスのみを表示するために以下のコマンドを使うことができます:

lspci|grep"USB"

これはRegExの実際の最もシンプルな例です。これはターミナルで正規表現を使用する最も一般的な方法ですが、唯一の方法ではありません。今日では、テキストエディタからファイルマネージャーまで、さまざまなソフトウェアにおいてRegExのサポートがあります。

パターンを見つける

恐らく、ターミナルでファイルやフォルダーを選択する際にワイルドカードとして機能する*文字を使用したことがあるでしょう。たとえば、フォルダー内のすべてのJPGファイルを一覧表示するには、次のように使えます:

ls*.jpg

上記のRegExに相当するものは次のようになります:

ls|grep-E"\.jpg"

Intro To Regex Filter Jpgs

jpgとpngファイルの両方を検索するには、次のように使用します:

ls|grep-E"(\.jpg|\.png)"

範囲

特定の文字の範囲をパターンではなく検索したい場合は、ブラケットで定義できます。たとえば、[a-z]をパターンとして使うと、アルファベットのすべての小文字の文字からなる文字列にマッチします。

予想通り、[A-Z]は大文字の文字のみを選択します。大文字と小文字のいずれかの範囲を選択するには、表現を[a-zA-Z]に変更します。

パターンの特定数のインスタンスを見つけるには、波括弧で指定できます。{5}はパターンの5回の出現を返します。また、数の範囲を使うこともできるので、{5,10}は5から10の出現を表示します。

メタキャラクター

正規表現では、メタキャラクターと呼ばれる2文字で文字列の部分を検索することもできます。これは、シェルで使用したかもしれないワイルドカードマッチに似ています。

主なものは単純なドットで、他の任意の一文字を表します。例えば、c.llというパターンを使用すると、「cell」だけでなく「cull」や「call」にもマッチします。

ドットの後にアスタリスクを入力することで、無限の文字数のマッチに使用することができます。例えば、.*boardは「keyboard」と「skateboard」の両方にマッチします。「key」と「skate」が異なる文字数であってもです。

エスケープ

例の中で、異なるタイプの画像ファイルを選択する際に、期間の前にバックスラッシュ(“.jpg”)を使用したことに気づいたかもしれません。これは、RegExで特殊文字をエスケープする方法です。

それを使用しなければ、パターンはファイルの拡張子だけでなく、文字列「.jpg」や「.png」にもマッチしますが、「ajpg」や「opng」にもマッチしてしまいます。覚えておいてください、.は任意の文字にマッチするワイルドカードです。

アンカーと境界

アンカーと境界を使用すると、正確に求めているものを定義できます。

「computer」という単語のみを見つけるには、その前後に他の文字が付いていないことを指定し、パターンを\として定義する必要があります。

また、行の先頭または末尾に出現するパターンを特定することも可能です。これはそれぞれ^および$の文字を使って達成されます。

したがって、「computer」という単語が行の先頭に出現するエントリのみを見つけたい場合、パターンは^computerになります。逆に、行の末尾にある場合は、パターンはcomputer$に変更されます。

これらは正規表現のシンプルなルールであり、組み合わせて探しているパターンを正確に見つけることができます。行の先頭の文字範囲や行の末尾の交互の単語、特定の日付、または年の範囲を単一の文字列を使用して検索できます。

正規表現をマスターするためのチートシートもぜひチェックしてください。