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

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

関連記事

sphinxでpythonのクラスや関数のドキュメントを自動生成する

概要 みなさんこんにちはcandleです。今回はpythonのSphinxを使ってクラスや関数の説明を自動生成します。 前提 Python3を使って説明しますが、おそらくpython2でも動くと思いま …

react-lazyloadを使って画像を遅延ロードをする

概要 みなさんこんにちはcandleです。今回はreact-lazyloadを使って画像の遅延読み込みをしてみましょう。SPAにおける問題は最初の読み込み時の遅さです。その中でも画像が多いサイトになる …

railsのrakeのmigrationファイルを削除しNO FILEとstatusに出た時の対処

概要 みなさんこんにちはcandleです。今回は誤ってデータベースに反映したマイグレーションファイルを不要だと思って削除した時に、NO FILEと出てきてしまった時の対処です。 言うなれば、下のような …

CakePHPでhelloworld

概要 CakePHPでプログラミングのお約束helloworldを行いましょう。 helloworldとは動作確認も含めた、一番最初に書くプログラムコードです。 だいたいはhello worldと単純 …

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

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

  • English
  • 日本語

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