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

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

関連記事

ruby on railsでpdfファイルをダウンロードさせる

概要 みなさんこんにちはcandleです。pdfファイルのダウンロードのやり方を紹介します。 前提 railsの環境が出来ている twitterbootstrap gem を使用した環境で説明して行き …

phpとmysqlでアカウント管理する時のテストユーザーのパスワードの暗号化はmysqlのsha1でもできる

by brewbooks 概要 みなさんこんにちはcandleです。最近はphpでサービスを書いたりしています。その中でテストユーザーのアカウント管理でパスワードを暗号化してデータベースに収めています …

【TwitterBootstrap2.3.2】cssによるレスポンシブwebデザインのメディアサイズの範囲分け

概要 みなさんこんにちはcandleです。今回は当たり前の内容ですが、twitterbootstrap2.3.2(以下bootstrap)のmediaサイズがどの様に分けられているのか見てみましょう。 …

railsのscaffoldでremote formを使ってフォームの送信をajax化する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxしたいとおもいます。 正直、解説するまでもなく簡単です。 前提 適当なrailsプロジェクトが存在す …

ruby on rails4でtwitter bootstrap 3のgemを使用してscaffoldを作成する

概要 みなさんこんにちはcandleです。今回はrails4上でtwitterbootstrap3のgemを使ってscaffoldしてみたいと思います。 scaffoldとはご存知のようにいわゆるwe …

  • English
  • 日本語

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