【Ruby入門】正規表現で置換する
  • facebookページ
  • twitterページ
  • 2017.12.04

    【Ruby入門】正規表現で置換する

    前記事「正規表現とは何か」では、正規表現の基本を解説しました。

    解説を読まれた方々の中には、正規表現の解説としてある種の物足りなさを感じた方もおられるでしょう。

    というのも、先の記事の冒頭の例は「ハイフンを除去する」なのに、最後まで検索しか触れていませんでした。

    そうです、正規表現における検索以外のもう1つの仕事「置換」について触れていないのです。

    よって、本記事では検索ともう一つ、正規表現の重要な役割である置換について解説します。

    前回と同様、いきなりRubyのコードで解説せず、エディター(Sublime Text)を使って解説します。

    正規表現を使った置換とは

    基本的には検索のときに使ったテクニックを応用します。

    マッチしたい文字列と、置き換えたい文字列を指定します。

    単純な例でみてみましょう。

    これを、以下のように指定します。

    結果はこうなります。

    数字3文字がアスタリスク3文字に置換できました。

    数字3文字というパターンを指定して置換しました。普通の文字列置換とはちがう雰囲気を、感じていただけたでしょうか?

    代表的な正規表現の置換例

    先の例は正直言って役に立ちませんが、以降は実際に使えそうな置換を解説します。

    空行を削除する

    空行を削除する、別の言い方をすれば「行頭が改行コード」となります。これを消せばOKです。

    置換条件に以下を入れてください。

    この置換を実行した結果が以下です。

    行頭がいきなり改行、つまり空白行を削除できました。

    行末の空白を削除する

    行末を表すメタ文字$を使います。見た目には分かりませんが、行末に空白があります。

    置換条件に以下を入れてください。

    空白1つとプラス、ドルマークです。プラスは1回以上の繰り返しを表すメタ文字です。

    この置換を実行した結果が以下です。

    しつこいようですが、行末に空白があったのですが消えています。

    行を削除する

    ある特定の条件を満たす行を消すことができます。

    例えば、英数字以外で開始する行を消してみましょう。

    この置換を実行した結果が以下です。

    英数字以外で開始している一番下の行が消えました。

    ハイフンを消す

    さらに複雑な置換にチャレンジしてみましょう。

    前回の記事の、郵便番号のハイフンを消す置換です。

    上記からハイフンを消してみましょう。

    この置換を実行した結果が以下です。

    一体何が起こったのでしょうか?じっくり解説します。

    変換結果を変数に入れる

    もう一度正規表現を見てみましょう。

    カッコで囲った箇所が2つあります。正規表現の置換において、カッコで囲うと合致する部分を変数に格納することができます。

    カッコで囲ったあとは、$プラス順番でそれを呼び出せます。つまり、最初の(\d{3})を$1、2つ目の(\d{4})を$2として使えるわけです。

    1つめのカッコと2つ目のカッコの間のハイフンを取って(つまりつなげて)$1$2と表現することにより、直接結果を結合してハイフンを消すことができました。

    URLからドメインを抽出

    URLからドメインを抽出、つまりドメインを残してその他は消してしまいましょう。

    この置換を実行した結果が以下です。

    解説します。

    先頭はhttpまたはhttpsで始まるので、いずれかに一致するものという意味の( | )を使います。

    (http|https)とすることで、httpまたはhttpsのいずれかという選択ができます。

    続けて「[^/]+」ときます。これは「/」の直前の文字が1文字以上、つまりhttpまたはhttps://から次の/までという意味になります。

    先ほど述べた通り、$3とすることで3つめのカッコのみという指定ができます。

    よって、前述の結果が得られたというわけです。

    h2タグの中身だけを取り出す

    h2タグで囲まれた中身だけを抽出しましょう。

    この置換を実行した結果が以下です。

    h2タグの開始と終了を指定します。その中身が問題です。

    カッコの中の.*は、任意の一文字が0回以上繰り返すという意味です。

    それをカッコで囲ったので、置換結果で$1とすることで中身を取り出すことができました。

    キャプチャ

    最後にキャプチャという便利な機能を解説します。

    とあるチェックでマッチしたものを以降で使える、というものです。

    以下のような文章があったとしましょう。

    この文章は、「今日は<天気>だった。明日も<天気、つまり前とおなじ>かなあ。」というように、前の文章と同じ天気が後ろの文章に続く、というものです。

    これを天気だけ抽出するには、以下のようにしてください。

    この置換を実行した結果が以下です。

    解説しますと、1つめの( )でマッチしたものが、後ろで\1として呼ばれています。

    前の文章で(.+)とは何がマッチするか決まっていません。しかし後ろの文章でヒットしたものを使いたい、という場合にキャプチャはとても便利です。

    まとめ

    本記事では、正規表現を用いた置換を解説しました。

    正規表現の置換は、まだまだたくさんの手法があります。本記事の内容に物足りなさを感じたら、是非ともご自身でいろいろと試してみてくださいね!


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE