2011-07-03 9 views
1

2つの異なるタグの文字列を解析し、それぞれをデータベースに格納したいとします。これらのtag1とtag2を呼び出してみましょう。私はdelimeterを持っています、 "?#"はtag1とtag2の間の分割です。Rubyで文字列を解析してデータベースに保存する

と仮定

t = "random text blah firsttag?#secondtag more blah" 

目標:TAG1 "はfirsttag" であるべきであり、TAG2は、先行または後続のランダムテキストなしで "secondtag" でなければなりません。それぞれは、データベースにオブジェクトとして格納する必要があります。

私のような何か試してみました:

t.split 

をそれは

["random text blah firsttag", "secondtag more blah"] 

を返し、ランダムなテキストを含んでいます。どちらの方向にも最初のスペースに到達したら、スプリットを停止するにはどうすればよいですか?

私は、複数のタグのペアが文字列である場合、例えば、場合、これはまた仕事したい:

m = "random firsttag#?secondtag blah blah 1sttag#?2ndtag blah blah blah" 

私はルビーやレールの両方にかなり新しいので、私は本当にあなたに感謝これを手伝ってください!

はまず者がtag?#tag2あるテキストの興味深い部分をキャプチャしてみましょう

tags = t.match(/\S+\?#\S+/)[0].split('?#') 

説明:

答えて

3

あなたは、分割と結合し、正規表現を使用することができます。私たちは、そのための正規表現を使用します:

/\S+\?#\S+/ 

説明:

\S+は、区切りの前の非空白文字(タグ)

\?#

\S+はすべてキャプチャトークン区切り文字をキャプチャをキャプチャ末尾の非空白文字(タグ2)

その正規表現の一致(whi我々は[0]にアクセスし、CHである:

firsttag?#secondtag

その後から、我々はちょうど区切り文字を使用して分割し、我々はタグを持つ配列を得ることを。

乾杯!

PS:それはruby-on-railsとは関係がないので、投稿のタグを変更しました。それはちょうど普通のルビーです

+0

ありがとうパブロ、私は特に有用な正規表現ウォークスルーを見つけた! – s2t2

+0

問題ありません!歓声 –

+0

フォローアップの質問:これらの解析されたスニペットをデータベースに保存するにはどうすればよいですか?具体的には、Twitterの宝石を使って、データベースにツイートを保存して保存しています。上記の方法でつぶやきを解析し、スニペットを作成した関連オブジェクトクラスにインスタンスとして格納したいと思います。何か案は? – s2t2

関連する問題