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

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

関連記事

railsのaws-sdk gemを使ってs3のフォルダ(folder)を削除する

概要 みなさんこんにちはcandleです。今回はs3にあるフォルダを丸ごとrailsのaws-sdk gemを使用して削除してみたいと思います。 実はこの方法を確立するまですごく四苦八苦しました。なん …

Rails pluginを使ったgemの作り方[4](controller helper編)

概要 みなさんこんにちはcandleです。今回はgemの中枢とも言えるhelperの作り方です。 helperというのは様はgemにすることで便利になる関数を作るとというイメージです。 例えば、con …

memcachedサーバとruby on railsのdalliを使用してセッションを管理する

概要 みなさんこんにちはcandleです。今回はmemcachedサーバを利用してrailsのセッションを管理してみたいと思います。 一般にrailsでセッション管理をしていると、ブラウザのcooki …

fabricのsshのネットワーク設定でパスワードか公開鍵を使って認証する

概要 皆さん今日はcandleです。今回はsshを使ったfabricの設定をしましょう。 一般にsshにはパスワード認証と公開鍵認証があるので、そのどちらも試してみましょう。 もちろんセキュリティ面で …

Rails pluginでengineを使ったgemの作り方[6](config編)

概要 みなさんこんにちはcandleです。今回は前回に引き続き、gemの作成をやっていきます。 gemのconfigとは恐らく一般的に以下の様な状況の時に使う事になると思います。 例えば、gemのプロ …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ