0

我在 Ruby(在 Rails 上)中的正则表达式有问题。我对此比较陌生。

测试字符串是: http : //www.xyz.com/017010830343 ?$ProdLarge$

我正在尝试删除“$ProdLarge$”。换句话说,$ 符号和介于两者之间的任何东西。

我的正则表达式是:\$\w+\$

Rubular 说我的表情没问题。http://rubular.com/r/NDDQxKVraK

但是当我运行我的代码时,应用程序说它没有找到匹配项。下面的代码:

some_array.each do |x|
   logger.debug "scan #{x.scan('\$\w+\$')}"
   logger.debug "String? #{x.instance_of?(String)}"

   x.gsub!('\$\w+\$','scl=1')

   ...

我的记录器调试行显示“[]”的结果。字符串被确认为真。并且 gsub 行没有效果。

我需要纠正什么?

4

2 回答 2

5

使用/regex/代替'regex'

> "http://www.xyz.com/017010830343?$ProdLarge$".gsub(/\$\w+\$/, 'scl=1')
=> "http://www.xyz.com/017010830343?scl=1"
于 2013-01-14T20:11:41.460 回答
2

不要为此任务使用正则表达式,使用专为它设计的工具URI。要删除查询:

require 'uri'

url = URI.parse('http://www.xyz.com/017010830343?$ProdLarge$')
url.query = nil

puts url.to_s
=> http://www.xyz.com/017010830343

要更改为不同的查询,请使用 this 而不是url.query = nil

url.query = 'scl=1'

puts url.to_s
=> http://www.xyz.com/017010830343?scl=1

URI 将在必要时自动对值进行编码,从而为您省去麻烦。如果您需要更多的 URL 管理能力,请查看Addressable::URI

于 2013-01-15T01:21:01.677 回答