joppot

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

プログラミング

Railsの正規表現を使用して文字列から任意の文字を取得する

投稿日:


t_DSC_2140

概要

みなさんこんにちはcandleです。今回はrailsの正規表現を使って任意の文字を文字列から取得する方法を紹介します。

rails4になってからなのか、railsはrubyであるにもかかわらず、Regexpクラスが使えません。より記号的な方法で正規表現を使うことになっています。やっていきましょう。


前提

railsの環境が整っている


文字列から任意の文字を取得する

railsの適当なアクションの中で下の文字列を用意します。

htmlstr='<p style="position:absolute;top:290px;left:65px;white-space:nowrap" class="char">hello</p>'

私はpostコントローラーのindexアクションに準備しました。

str
文字列htmlstrの中の「left:65px」の部分を正規表現を使って取り出したいと思います。

一般に正規表現は下の構文を使います。

 /正規表現/ =~ 対象の変数
 $& #結果が入っている変数

なんだかよくわからないと思うので、実例を使いながら説明します。
htmlstr変数から「left:65px」を取得したい場合は下のように書きます。

/left:[0-9]*px/ =~ htmlstr
result=$& #<-結果

最初の1行はなんとなくわかると思います。htmlstrに対して「/left:[0-9]*px/」という正規表現を当てはめています。
2行目の「$&」は正規表現した結果を一時的に保存している変数と認識していれば良いと思います。
この$&変数は正規表現をする度に値が上書きされるので、複数回、正規表現をする場合は、結果を上のように、変数に収めておく必要があります。

下のコードを書いて結果を見てみましょう。

htmlstr='<p style="position:absolute;top:290px;left:65px;white-space:nowrap" class="char">hello</p>'
/left:[0-9]*px/ =~ htmlstr
result=$& #<-結果
p result

railsのコンソールを見ると、「left:65px」が取得できている事がわかります。
ruby


railsの正規表現を関数化する

=やら〜やらを使って正規表現するのは可読性が悪いので、自前で関数化してしまいましょう。
作成したのは下のgetregstr関数です。命名が微妙なのは否めませんが適宜変更してください。

def getregstr(pattern,str)
  pattern =~ str
  return $&
end

これを使う場合は下の様に書きます。

htmlstr='<p style="position:absolute;top:290px;left:65px;white-space:nowrap" class="char">hello</p>'
result=getregstr(/left:[0-9]*px/,htmlstr)
p result

結果はもちろん「left:65px」が取得できています。

ruby2


まとめ

使いづらい処理は関数化するというのが私のモットーです。どうでしょうか。

スポンサードリンク

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

-プログラミング
-

執筆者:


comment

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

関連記事

railsのaws-sdk gemを使ってs3に画像ファイルをフォームからアップロードする

概要 みなさんこんにちはcandleです。比較的難しいrailsからs3に画像をアップロードする方法を試してみましょう。 一般にサーバ環境にはスケーラビリティ(アクセスの規模に応じて、動的にサーバを動 …

railsのfluent-loggerとdevise gemを使ってユーザーの行動をfluentdサーバに収集する

概要 fluentdと言えば、ビックデータで扱うようなデータを集め出力するサーバですが、これとrailsのfluent-logger gemとdevise gemを組み合わせてユーザーの行動ログをとっ …

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

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

reactで最もシンプルなドロップダウンメニューを作成

概要 みなさんこんにちはcandleです。今回はreactで最もシンプルなドロップダウンメニューを作ってみたいと思います。 前提 Reactの知識がある 準備 以下のコマンドでreactプロジェクトを …

PEARのDBライブラリのインストールと使い方

概要 みなさんこんにちはcandleです。PEARには複数の便利なライブラリがあります。 その中の1つに実はもう古くなってあまり推奨されていませんが、データベースにつないだり、データベースの値を取得す …

  • English
  • 日本語

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