joppot

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

プログラミング

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

投稿日:

Pocket

t_DSC_2140

概要

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

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


前提

railsの環境が整っている

SPONSORED LINK


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

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のsimple-captcha gemを使用してform_forを使ったフォームを画像認証する

概要 みなさんこんにちはcandleです。公に開かれたフォームはスパムや総当り攻撃を受けやすいです。 そこで、画像認証を導入して、悪意のあるフォームを拒否してみましょう。 simple-captcha …

wysiwygエディタのSquire editorのサンプルを作成する

概要 みなさんこんにちはcandleです。 今回オープンソースのsquireエディタをhtmlに手動で導入したいと思います。 squireはオープンソースの便利なwysiwygエディタです。 カスタマ …

ruby on railsに最強のwysiwygエディタ、Squireを導入する

概要 みなさんこんにちはcandleです。今回はruby on railsにsquire editorを導入したいと思います。 squireはオープンソースの便利なwysiwygエディタです。 カスタ …

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

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

Twitterbootstrap3の開発環境構築とファイル配置、テンプレートを試す

概要 みなさんこんにちはcandleです。今回はtwitterbootstrap3のダウンロードを行い、ファイルを配置して、開発できる様に準備します。 twitterbootstrap3は最近リリース …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ