在Ruby字符串中查找和替换变量

时间:2010-10-29 20:55:39

标签: ruby-on-rails ruby regex string replace

假设我有一个像这样的字符串:

  

“Lorem ipsum de color [post] 57 [/ post]   坐在[post] 103 [/ post] desectator。“

我想查找[post] * [/ post]的所有匹配项,并将其替换为数字所代表的帖子的标题。我最终得到了类似的东西:

  

“Lorem ipsum de color愤怒的龟坐   amet模糊Rabit desectator。“

我猜测需要正则表达式...寻找正则表达式以及如何使用。

2 个答案:

答案 0 :(得分:7)

String上的gsub方法有一个方便的块变体,在这里运行良好:

>> 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."

然而,你的语法对正则表达式的友好程度要低得多。尽量不要使用括号和斜杠。

答案 1 :(得分:2)

(阅读更简单的语法评论后) 如果您有像

这样的哈希值
posts = {57 => "Angry Turtle", 103 => "Fuzzy Rabit"}

或类似的数组,嗯,

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

那么为什么不进行字符串插值?

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

你准备好了。