这是Regexp的bug还是其他的东西?

时间:2013-01-27 01:39:13

标签: ruby regex

我在玩Ruby的Regexp。我想找到一个Regexp技巧,但我无法理解,为什么?

  p a = "This is a test!".gsub!(//,'X')

以上输出

  "XTXhXiXsX XiXsX XaX XtXeXsXtX!X"

它在测试字符串中的任何字符之前和之前放置'X'。谁知道为什么?

3 个答案:

答案 0 :(得分:3)

//匹配零宽度的子串,即空字符串。在任何相邻字符之间有任意多个空字符串,但gsub系列不在同一位置保持匹配。如果它找到匹配(即在这种情况下是空字符串),那么它将不会在同一位置再次匹配,因此它继续到下一个相邻字符之间的空字符串。

答案 1 :(得分:2)

您要求它匹配零宽度字符串(//),并将其替换为“X”,所以它就这样做了。 gsub扫描字符串并用替换字符替换每个匹配项(每个字母边界)。

答案 2 :(得分:0)

你要求它匹配一个空格,所以它匹配字母之间的每个空格。

它与字母不匹配所以所有字母都保留。