joppot

コピペで絶対動く。説明を妥協しない

unix プログラミング

正規表現を極めるその1

投稿日:2014年2月15日 更新日:

Pocket

reg

概要

みなさんこんにちはcandleです。今回から正規表現を1から100まで極めようと思います。

正規表現って、使えると便利ですが、それを勉強して使いこなせている人って少ないと思います。この機会にぜひ使いこなせる様にしていきましょう。

正規表現とは言うならば、ものすごい細かい検索ができる機能でしょうか?

普通の検索でも「白+猫」と検索すれば、白と猫が引っかかる結果が表示されますよね。

それを「^白猫$」みたいによくわからない記号を加えたのが正規表現です。

正規表現はそれぞれのプログラム言語に標準的に実装されていて、phpでもjavaでもperlでも正規表現が使えます。

そうなると、それぞれの言語毎に正規表現の表現の仕方が異なるのではないか、と思われるかもしれませんが、実際は1割くらいしか変わりません。基本となる書き方を覚えておけば、後は応用でどうにでもなります。

この記事ではunixコマンドのgrepの正規表現を使って学びます。


前提

あるていどのunixコマンドが使える


サンプルファイルを用意する

では、デスクトップに次の文章をr.txtという名前で保存しましょう。

正規表現(せいきひょうげん、regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。
正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。
もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。

デスクトップ_—_bash


先頭のメタ文字「^」と行末のメタ文字「$」

では基本となる正規表現を試していきましょう。だいたいどのサイトにも同じ様に説明されるのが行頭と行末のメタ文字です。

「^○○」は○○で始まる行を検索します。

行頭が「正規表現」で始まるものを表示しましょう。

grep "^正規表現" r.txt

デスクトップ_—_bash 2

そうすると行頭が「正規表現」で始まるところが抽出されます。

行末を指定したい場合は「$」を使います。例えば、「である。」で終わっている行を見つけたい時は下の様に検索します。

grep "である。$" r.txt

「である。」で終わっているものが、検索されました。
デスクトップ_—_bash 3


「.」文字1文字を表すピリオド

ピリオドはなんでもよい1文字をあらわしています。ワイルドカードみたいなものです。
例えば、「正規表現」と「正則表現」の両方をgrepで見つけたい時は「規」「則」の所にピリオドを指定することで検索が可能になります。

grep "正.表現" r.txt

デスクトップ_—_bash 4

上を見ると分かる様に、「正規表現」も「正則表現」も検索されています。

「○○表現」というのを検索したい場合は

grep "..表現" r.txt

で検索できます。
デスクトップ_—_bash 5

「列で表現」というのも検索されましたね。これも確かに「○○表現」というルールに当てはまります。


「 | 」は「または」を表す

プログラミングをやっていると 縦棒は 論理式のORを表すと何となくわかるのではないでしょうか。例えば「正規表現」または「正則表現」を検索したい場合は

grep "正規表現\|正則表現" r.txt

になります。
デスクトップ_—_bash-3

縦棒の前にバックスラッシュがあるのは恐らくunixコマンドと混同しない様に使用していると思います。grepでは縦棒の前にバックスラッシュを置いた「 \| 」を利用します。


その1まとめ

正規表現第一弾はここまでです。次回第二弾に続きます。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-unix, プログラミング
-,

執筆者:


comment

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

関連記事

processingで重複しないランダムな数を配列で取得する

概要 みなさんこんにちはcandleです。今回はprocessingで重複しないランダムな数を配列で取得する関数を作成したいとおもいます。 前提 なし

最高に見やすいターミナルのフォントを選ぶ

概要 みなさんこんにちはcandleです。 今回は最高に見やすいターミナルのフォントと題し、解説していきたいと思います。 フォントを選ぶことは人生を選ぶくらい大事なことなのはお分かりだと思います。 プ …

railsのscaffoldでremote formで送信後jsonを取得する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxした時に、 サーバに送った値をjavascript側で受け取る方法を紹介します。 ちなみに、私は下の …

MysqlのSELECT FROMの結果を美しく、見やすく表示する

概要 みなさんこんにちはcandleです。今回はmysqlのデータベースに関する簡単な記事です。 データベース系の言語は最近、様々出てきましたが、私は未だにMysqlくらいしか触っていません。 私はp …

phpのsnappyライブラリをmacで使用して、webサイトのサムネイルを取得する

概要 みなさんこんにちはcandleです。今回はsnappyを使用して、ウェブサイトのサムネイルを自動的に取得したいとおもいます。 snappyはそれ自体がhtmlを画像にするスクリプトではなく、wk …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ