正则表达式匹配不包括第一个字符的字符串

时间:2014-02-04 21:57:34

标签: ruby regex string gsub

我正在写ruby,需要一些正则表达式的帮助。而且我在regexp中真的很棒。 我有一个像这样的字符串

/hello/world

我想#gsub这个字符串将第二个斜杠更改为%2F。 让我忽略第一个斜线并改变仅第二个斜线的挑战。 我试过这个

[^/]/

但它选择不清除斜线,而

中的 o /
/hello/world

请帮帮我。谢谢!

5 个答案:

答案 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"