Ruby字符串转义,用于序列化(字符串转储和加载)

时间:2011-08-31 14:01:33

标签: ruby serialization escaping deserialization

我有一个字符串,我想序列化反序列化。例如:

"hello, world"

现在,如果我按world找到并替换(转储步骤)每个o子字符串,则此字符串将变为:

"hello, o"

但是,如果我尝试以oworld加载步骤)的另一种方式再次查找并替换,则此字符串变为:

"hellworld, world"

...这与第一个字符串不同。有没有一种简单的方法来处理这个问题,使用Ruby 1.9.2来解决这些问题?

谢谢!

修改

换句话说,我能够:

  1. 用文本替换文本中的参数(例如“world”)(例如“o”)。
  2. 根据示例替换任何值(“o”,根据示例)“(world”,根据示例)
  3. 所以我希望能够这样做(使用dump()load()方法):

    string = "Hello world, Ruby on Rails 3.1.0 is out! Yay!"
    serialized_string = dump(string)
        # => "Hell\o o, Ruby \on Rails 3.1.0 is \out! Yay!"
    
    load(serialized_string).should == string # => true
    

    感谢您的任何想法:)

2 个答案:

答案 0 :(得分:0)

出于好奇,你为什么要这样做? 这与ruby没什么关系,但是使用正则表达式。

无论如何,存储原始字符串会不会更容易,以便你可以恢复它?

或者,如果您只想匹配上一个o,请尝试使用模式o$

但我真的认为你应该提供更多关于你的实际用例的信息。

答案 1 :(得分:0)

如果您将gsub与正则表达式一起使用。

"hello, o".gsub /o$/, world

我相信会做你想做的事。

修改

如果您知道该单词将始终被空格,字符串的开头或结尾包围,您可以使用以下内容:

o = "whatever you want"
world = "the very long article you mentioned"
"an even longer article".gsub /^#{o}&|^#{o}\s|\s#{o}\s|\s#{o}&/, world