我正在写ruby,需要一些正则表达式的帮助。而且我在regexp中真的很棒。 我有一个像这样的字符串
/hello/world
我想#gsub这个字符串将第二个斜杠更改为%2F。 让我忽略第一个斜线并改变仅第二个斜线的挑战。 我试过这个
[^/]/
但它选择不清除斜线,而
中的 o //hello/world
请帮帮我。谢谢!
答案 0 :(得分:3)
您可以在组中的斜杠之前捕获字符,并在替换中使用该字符,例如:
"/hello/world".gsub(/([^\/])\//, '\1%2F') #=> "/hello%2Fworld"
或者如果您只想匹配第一个字符后面显示的任何/
,您可以将其简化为:
"/hello/world".gsub(/(.)\//, '\1%2F') #=> "/hello%2Fworld"
或者像这样:
"/hello/world".gsub(/(?<!^)\//, '%2F') #=> "/hello%2Fworld"
答案 1 :(得分:1)
您需要在()
中使用子模式来查找子字符串:
/^\/(.*)$/
或
/^.(.*)$/
此模式不包括第一个字符。然后替换此子字符串中的/
答案 2 :(得分:1)
现在换一个丑陋的,无正则的替代方案:
"/hello/world".split("/").tap(&:shift).unshift("/").join("")
我会看到自己。
答案 3 :(得分:0)
(?!^\/)\/
http://rubular.com/r/IRWptAJdLs是一个有效的例子。
答案 4 :(得分:0)
将第二个/
更改为%2F
:
'/hello/world'.sub /(\/.*?)\//, '\1%2F'
#=> "/hello%2Fworld"