在 Ruby 中,如何替换字符串中的问号字符?

发布于 2024-07-13 19:35:35 字数 415 浏览 11 评论 0原文

在 Ruby 中,我有:

require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo)      # => "et%20tu,%20brutus?"

我试图让 bar 等于“et%20tu,%20brutus%3f”(“?”替换为“%3F”) 当我尝试添加以下内容时:

bar["?"] = "%3f"

“?” 匹配一切,我得到

=> "%3f"

我已经尝试过

bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]

还有其他一些东西,但没有一个起作用。

In Ruby, I have:

require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo)      # => "et%20tu,%20brutus?"

I'm trying to get bar to equal "et%20tu,%20brutus%3f" ("?" replaced with "%3F") When I try to add this:

bar["?"] = "%3f"

the "?" matches everything, and I get

=> "%3f"

I've tried

bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]

And a few other things, none of which work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

倾其所爱 2024-07-20 19:35:35

需要'cgi'并调用CGI.escape

require 'cgi' and call CGI.escape

羞稚 2024-07-20 19:35:35

现在在 Ruby 中只有一种好方法可以做到这一点:

require "addressable/uri"
Addressable::URI.encode_component(
  "et tu, brutus?",
  Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"

但是如果你正在使用 URI 做一些事情,你真的应该使用

sudo gem install addressable

There is only one good way to do this right now in Ruby:

require "addressable/uri"
Addressable::URI.encode_component(
  "et tu, brutus?",
  Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"

But if you're doing stuff with URIs you should really be using Addressable anyways.

sudo gem install addressable
雪花飘飘的天空 2024-07-20 19:35:35

这是一个示例 irb 会话:

irb(main):001:0> x = "geo?"

=> "geo?"

irb(main):002:0> x.sub!("?","a")

=> "geoa"

irb(main):003:0> 

但是, sub 只会替换第一个字符。 如果要替换字符串中的所有问号,请使用 gsub 方法,如下所示:

str.gsub!("?","replacement")

Here's a sample irb session:

irb(main):001:0> x = "geo?"

=> "geo?"

irb(main):002:0> x.sub!("?","a")

=> "geoa"

irb(main):003:0> 

However, sub will only replace the first character. If you want to replace all the question marks in a string, use the gsub method like this:

str.gsub!("?","replacement")
诺曦 2024-07-20 19:35:35

如果您知道接受哪些字符,则可以删除那些不匹配的字符。

accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')

If you know which characters you accept, you can remove those that don't match.

accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')
岁月流歌 2024-07-20 19:35:35

URI.escape 接受可选参数来告诉您要转义哪些字符。 它会覆盖默认值,因此您必须调用它两次。

> URI.escape URI.escape("et tu, brutus?"), "?"
=> "et%20tu,%20brutus%3F"

URI.escape accepts the optional parameter to tell which characters you want to escape. It overrides defaults so you'll have to call it twice.

> URI.escape URI.escape("et tu, brutus?"), "?"
=> "et%20tu,%20brutus%3F"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文