joppot

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

プログラミング

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

投稿日:

Pocket

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

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

関連記事

emacsでplantUMLをplantuml-modeを使って作成する

Autumn leaves on wood table 概要 みなさんこんにちはcandleです。今回はplantUMLをサポートするemacsのplantuml-modeを導入して使ってみましょう。 …

MAMPのSQLiteManagerを使用してsqlite3のテーブルの作成とフィールドの設定、レーコードの挿入を試す

概要 みなさんこんにちはcandleです。前回と引き続き、SQLiteManagerを使用してsqlite3を試してみましょう。 はじめに、書いておきますが、MAMPのSQLiteManagerはSQ …

gitpythonでfirst commitする

概要 みなさんこんにちはcandleです。今回はgitpythonで、初めてのコミットをする方法を紹介します。 gitpythonでコミットは難しくないのですが、初めてのコミットは要領が違ったので、ま …

railsのrakeで作成したカラムの型とdefault値を変更する方法

概要 みなさんこんにちはcandleです。今回はrakeコマンドのややこしいところを扱います。 rakeコマンドはわりと便利で、データベースのカラムの追加や型の変更をマイグレーションファイルから読み込 …

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

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

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ