Rubyの正規表現の活用法10選をプロが解説

Rubyの正規表現の活用法を学ぶ手順とサンプルコードが描かれた図表 Ruby
この記事は約12分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミング言語Rubyで正規表現を使うスキルは、あなたのコーディング能力を大幅に向上させるための重要な一歩です。

この記事では、Rubyで正規表現をどのように利用するかを初心者でも理解できるように説明します。

また、具体的なサンプルコードとその詳細な解説を10個提示します。

この記事を読むことで、あなたは手軽にRubyで正規表現を利用できるようになるでしょう。

●Rubyと正規表現について

まずは、Rubyと正規表現について理解を深めましょう。

○Rubyとは

Rubyは、まつもとゆきひろ(通称Matz)氏によって開発されたプログラミング言語です。

Rubyは人間中心の設計哲学を持っており、コードを読んで理解することが容易であるという特徴があります。

また、オブジェクト指向のプログラミング言語であり、非常に強力で柔軟性のある機能を持っています。

○正規表現とは

正規表現(Regular Expression)は、文字列の検索や置換を行うためのパターンです。

特定のパターンを持つ文字列を検索したり、抽出したり、置換したりする際に使います。

例えば、メールアドレスの形式が正しいかチェックしたり、HTMLタグを取り除いたりするのに使われます。

●Rubyで正規表現を使う基本的な方法

○基本的なパターンマッチング

Rubyで正規表現を使う基本的な方法はパターンマッチングです。

これは、指定したパターンが文字列に含まれているかを確認するものです。

パターンは/パターン/のようにスラッシュで囲むことで作成します。

例えば、文字列に”Ruby”という単語が含まれているかを調べるには次のように書きます。

str = "I love Ruby"
if str =~ /Ruby/
  puts "文字列にRubyが含まれています"
else
  puts "文字列にRubyが含まれていません"
end

このコードではstr =~ /Ruby/という表現で、文字列str/Ruby/というパターンを含むかをチェックしています。

もし含まれていれば、”文字列にRubyが含まれています”と表示します。

含まれていなければ、”文字列にRubyが含まれていません”と表示します。

実行すると、

文字列にRubyが含まれています

と表示されます。

この例では、文字列strに”Ruby”が含まれているため、”文字列にRubyが含まれています”と表示されます。

●Rubyにおける正規表現の活用例10選

ここからは、実際のサンプルコードを通して、Rubyで正規表現がどのように活用できるかを具体的に見ていきましょう。

この10のコードを理解し、自分のプログラムに取り入れることで、あなたのRubyスキルは大きく向上します。

○サンプルコード1:文字列の検索

まずは最も基本的な活用方法、文字列の検索から始めます。

str = "The quick brown fox jumps over the lazy dog"
if str =~ /quick/
  puts "文字列にquickが含まれています"
else
  puts "文字列にquickが含まれていません"
end

このコードでは、文字列str/quick/というパターンを含むかどうかをチェックしています。

含まれていれば、”文字列にquickが含まれています”と表示します。含まれていなければ、”文字列にquickが含まれていません”と表示します。

実行すると、

文字列にquickが含まれています

と表示されます。

この例では、文字列strに”quick”が含まれているため、”文字列にquickが含まれています”と表示されます。

○サンプルコード2:文字列の置換

次に、文字列の置換を見ていきます。

正規表現を利用すると、特定のパターンに一致する部分を簡単に置換することができます。

str = "The quick brown fox jumps over the lazy dog"
str.gsub!(/fox/, 'cat')
puts str

このコードでは、gsub!メソッドを使って、文字列str内の”fox”を”cat”に置換しています。

gsub!メソッドは、指定したパターンに一致する全ての部分を置換するメソッドです。

実行すると、

The quick brown cat jumps over the lazy dog

と表示されます。

この例では、”fox”という単語が”cat”に置換されています。

○サンプルコード3:数字の検出

数字の検出も正規表現の一般的な活用方法です。

下記のコードでは、文字列内の数字を全て検出しています。

str = "私の電話番号は080-1234-5678です"
numbers = str.scan(/\d+/)
puts numbers

このコードでは、scanメソッドと正規表現\d+を使って、文字列内の数字を全て検出しています。

\d+は一つ以上の数字の

連続を表しています。

実行すると、

["080", "1234", "5678"]

と表示されます。

この例では、”080″, “1234”, “5678”という3つの数字の連続を検出しています。

これらのコード例は、Rubyでの正規表現の一部に過ぎませんが、一歩ずつ理解し、活用することで、より効率的なコーディングが可能になります。

さらに多くの活用法を学びたい方は、Rubyの公式ドキュメンテーションを参照すると良いでしょう。

○サンプルコード4:Eメールアドレスの検証

正規表現を使うと、特定の形式にマッチするかどうかを検証するのがとても容易になります。

ここでは、正規表現を使ってEメールアドレスが正しい形式になっているかどうかを検証する方法を表します。

def valid_email?(email)
  !!email.match(/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i)
end

puts valid_email?("test@example.com") # true
puts valid_email?("test@example")     # false

このコードでは、valid_email?というメソッドを定義し、その中で引数として受け取ったemailが正しい形式のEメールアドレスかどうかを検証しています。

ここで用いられている正規表現はEメールアドレスの形式を表しています。

実行すると、

true
false

と表示されます。

この例では、”test@example.com”は正しい形式のEメールアドレスなのでtrueを返し、”test@example”は正しい形式ではないのでfalseを返します。

○サンプルコード5:URLの抽出

テキストからURLを抽出するのも正規表現の大きな力を発揮します。

次のコードでは、テキストからURLを抽出する例を示します。

text = "こちらのサイトをご覧ください: http://www.example.com また、こちらもオススメです: https://another-example.net"
urls = text.scan(/https?:\/\/[\S]+/)
puts urls

このコードでは、scanメソッドを使って、テキストから”http://”または”https://”で始まるURLを全て抽出しています。

ここで用いられている正規表現はURLの形式を表しています。

実行すると、

["http://www.example.com", "https://another-example.net"]

と表示されます。

この例では、”http://www.example.com”と”https://another-example.net”の2つのURLをテキストから抽出しています。

○サンプルコード6:HTMLタグの取り扱い

ウェブスクレイピングやHTML文書の解析において、HTMLタグを取り扱うことは頻繁に行われます。

ここでは、正規表現を使ってHTMLタグを取り扱う一例を見ていきましょう。

html = "<p>こんにちは、世界!</p><a href='https://example.com'>こちら</a>をクリックしてください。"
tags = html.scan(/<.+?>/)
puts tags

このコードでは、scanメソッドを使ってHTMLタグを全て抽出しています。

ここで用いられている正規表現<.+?>はHTMLタグの形式を表しています。

実行すると、

["<p>", "</p>", "<a href='https://example.com'>", "</a>"]

と表示されます。

この例では、””, “”, “”, “”の4つのHTMLタグを抽出しています。

○サンプルコード7:ログファイルの解析

正規表現は、ログファイルの解析にも非常に便利です。

下記のコードでは、特定の形式のログ行から日付を抽出する例を示します。

log_line = "2023-06-10 14:45:35 [INFO]: Server started."
match = log_line.match(/(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}/)
puts match[1]

このコードでは、ログ行から日付部分を抽出しています。

ここで用いられている正規表現(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}は日時の形式を表しています。

実行すると、

2023-06-10

と表示されます。

この例では、ログ行から日付部分”2023-06-10″を抽出しています。

○サンプルコード8:特定のパターンの反復の検出

言葉の反復や特定の形式の繰り返しを見つけることは、言語分析やパターンマッチングで必要となることがあります。

ここでは、正規表現を用いて、文章中の単語の反復を検出する一例を表します。

text = "こころこころと鳴く鳥のこころこころと鳴く声が聞こえる。"
repeats = text.scan(/(こころ)\1/)
puts repeats.length

このコードではscanメソッドと正規表現(こころ)\1を使って”こころこころ”という反復を探しています。

実行すると、

2

この例では、”こころこころ”という反復が2回検出されたことを示しています。

○サンプルコード9:文字列内の特定単語のカウント

文書内の特定の単語がどれだけ出現するのかを数えることは、文書の解析や自然言語処理によく使われます。

次のコードでは、文字列内の特定の単語をカウントしています。

sentence = "Rubyで正規表現を使ってみよう。Rubyの正規表現はとても便利だよ。"
count = sentence.scan(/Ruby/).length
puts count

このコードでは、scanメソッドと正規表現/Ruby/を使って、文章中の”Ruby”という単語の出現回数をカウントしています。

実行すると、

2

この例では、”Ruby”という単語が2回出現したことを表しています。

○サンプルコード10:テキストデータのクリーニング

テキストデータの前処理としてクリーニングが重要な作業です。

余計なスペース、タブ、改行などを取り除き、データを整形します。

Rubyでこれを実現するには、正規表現を活用することが可能です。

下記のサンプルコードは、テキストデータのクリーニングを行う一例です。

dirty_text = "\t ここに  余分な\t空白と 改行が\nたくさん\n\t\t入っ ています。 \n"
clean_text = dirty_text.gsub(/\s+/, ' ').strip
puts clean_text

このコードでは、gsubメソッドと正規表現\s+を使って、文章中の1つ以上の空白(スペース、タブ、改行)を単一のスペースに置換し、stripメソッドを使って先頭と末尾の余分な空白を取り除いています。

実行すると、

ここに 余分な 空白と 改行が たくさん 入っ ています。

この結果から、元々のテキストから余分な空白と改行が取り除かれ、すべての単語が一つのスペースで区切られていることがわかります。

●Rubyで正規表現を使う際の注意点と対策

Rubyで正規表現を使用する際は、パターンマッチングのパワーをフルに活用しつつも、いくつかの注意点を心に留めておくことが重要です。

まず一つ目は、正規表現がパフォーマンスに影響を及ぼす可能性があることです。

大規模なテキストや複雑なパターンマッチングを行う際には、正規表現の使用によるパフォーマンスの低下を避けるために、適切な方法を検討する必要があります。

例えば、必要な部分だけを対象にする、パターンをシンプルに保つなどの工夫が考えられます。

二つ目は、正規表現の構造が複雑になると、その理解とメンテナンスが難しくなることです。

可能な限りシンプルで読みやすい正規表現を作成し、必要に応じてその説明をコメントとして記述することで、他の開発者にとっても理解しやすくなります。

最後に、正規表現を用いたパターンマッチングは強力ですが、必ずしも全ての文字列操作に正規表現を使う必要はありません。

シンプルな文字列の検索や置換などは、正規表現を使わずともRubyの組み込みメソッドだけで十分に可能な場合があります。

まとめ

この記事では、Rubyの正規表現に関する基本的な知識と、その活用方法を10の具体的なサンプルコードとともに紹介しました。

これらのコードは、テキストのクリーニングや、特定のパターンを持つ文字列の検索、分割、置換など、日々のプログラミング作業における多様な課題を解決する手段となります。

また、正規表現を使用する際の注意点として、パフォーマンスへの影響や、コードの可読性とメンテナンス性、そして適切なユースケースの選定についても触れました。

これらは正規表現をうまく活用するための重要な要素です。

正規表現はパワフルなツールであり、Rubyプログラミングにおいて欠かせないスキルの一つと言えます。

しかし、その力を制御し、適切に使いこなすことが求められます。

それは、テキストを扱う全てのプログラミング言語において、常に挑戦となるテーマです。

この記事が、あなたのRubyでの正規表現活用力を一段階上げる助けとなれば幸いです。

プログラミングは継続的な学びが鍵となります。

日々のコーディングに活用しつつ、さらなる知識と技術の向上を目指していきましょう。