views:

61

answers:

2

Let's say I have a string like so:

"Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."

I want to find all occurrences of [post]*[/post] and replace it with the title of the post represented by the number. I'd end up with something like so:

"Lorem ipsum de color Angry Turtle sit amet Fuzzy Rabit desectator."

I'm guessing a regex will be needed... looking for what the regex would be and how to use.

+5  A: 

The gsub method on String has a handy block variation that works well here:

>> s = "Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."
=> "Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."

>> posts = {"57" => "Angry Turtle", "103" => "Fuzzy Rabit"}
=> {"57"=>"Angry Turtle", "103"=>"Fuzzy Rabit"}

>> s.gsub(/\[post\](\d+)\[\/post\]/) {|m| posts[$1] }
=> "Lorem ipsum de color Angry Turtle sit amet Fuzzy Rabit desectator."

Your syntax couldn't be much less regex friendly though. Try not to use brackets and slashes.

jwarchol
http://ruby-doc.org/core/classes/String.html#M000817
jwarchol
A: 

(after reading your easier syntax comment) If you have a hash like

posts = {57 => "Angry Turtle", 103 => "Fuzzy Rabit"}

or an array like, ehm,

posts = []
posts[57] = "Angry Turtle"
posts[103] = "Fuzzy Rabbit"

then why not go for string interpolation?

"Lorem ipsum de color #{posts[57]} sit amet #{posts[103]} desectator."

And you're ready to go.

steenslag
+1 Use the batteries that are included
gnibbler
Well my string is going to be input by a user. Plus my logic to get the post title won't be that direct.
tybro0103