【问题标题】:Ruby string escaping, for serialization (string dumping and loading)Ruby 字符串转义,用于序列化(字符串转储和加载)
【发布时间】:2011-08-31 14:01:33
【问题描述】:

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

"hello, world"

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

"hello, o"

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

"hellworld, world"

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

谢谢!

编辑

换句话说,我可以:

  1. 将文本中的参数(例如“world”)替换为值(例如“o”)。
  2. 将任何值(“o”,根据示例)替换为参数(“world”,根据示例)

所以我希望能够这样做(使用类似 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

感谢您的任何想法:)

【问题讨论】:

  • 你为什么要使用"o",一个很可能在原文章其他地方的字符串?
  • 这只是一个例子。
  • 因为它是明文。我只能解析它。我正在尝试获得一个细字符串序列化程序。

标签: ruby serialization escaping deserialization


【解决方案1】:

出于好奇,你为什么要这样做? 这与 ruby​​ 关系不大,但与正则表达式有关。

不管怎样,把原来的字符串存起来,方便恢复,不是更方便吗?

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

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

【讨论】:

  • 我希望能够这样做以便转储和加载任何字符串。我认为关键是在每个版本之后转义返回的字符串。
  • @Puru,请更新您的问题,详细说明您希望如何转储和加载任何字符串,大概是您希望在往返时保持完整的示例。有几个库,标准库的一部分,可以做到这一点。
  • @mark-thomas,感谢您的评论。我刚刚更新了我的问题。
【解决方案2】:

如果您将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

【讨论】:

  • 谢谢!但是有没有更通用的方法?我的字符串只是一个例子。这可能是一篇文章...
  • 不,但我刚刚更新了我的问题。我想现在更清楚了。
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多