Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 这是一个Regexp bug还是其他东西?_Ruby_Regex - Fatal编程技术网

Ruby 这是一个Regexp bug还是其他东西?

Ruby 这是一个Regexp bug还是其他东西?,ruby,regex,Ruby,Regex,我在玩Ruby的Regexp。我想找到一个Regexp技巧,但我不明白,为什么 p a = "This is a test!".gsub!(//,'X') 以上的输出是 "XTXhXiXsX XiXsX XaX XtXeXsXtX!X" 它在测试字符串中的任何字符之后和之前放置“X”。有人知道为什么吗?您要求它匹配零宽度字符串//,并将其替换为“X”,所以它这样做了。gsub扫描字符串并用替换项替换每个匹配的每个字母边界。您要求它匹配零宽度字符串//,并用“X”替换它,所以它这样做了

我在玩Ruby的Regexp。我想找到一个Regexp技巧,但我不明白,为什么

  p a = "This is a test!".gsub!(//,'X')
以上的输出是

  "XTXhXiXsX XiXsX XaX XtXeXsXtX!X"

它在测试字符串中的任何字符之后和之前放置“X”。有人知道为什么吗?

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

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

您要求它匹配一个空格,因此它匹配字母之间的每个空空格


它与一个字母不匹配,因此所有字母都保留了。

您要求它匹配一个空格,因此它匹配字母之间的每个空空格



它与字母不匹配,因此所有字母都保留。

//匹配零宽度的子字符串,即空字符串。任何相邻字符之间都有任意多个空字符串,但gsub族不会在同一位置保持匹配。如果它找到一个匹配项,即本例中的空字符串,那么它将不会在同一位置再次匹配,因此它将继续匹配下一个相邻字符之间的空字符串。

//匹配宽度为零的子字符串,即空字符串。任何相邻字符之间都有任意多个空字符串,但gsub族不会在同一位置保持匹配。如果它找到了一个匹配项,即本例中的空字符串,那么它将不会在同一位置再次匹配,因此它将转到下一个相邻字符之间的空字符串。

您说除了任何内容之外的所有内容都是空的,但是,您如何知道字符之间只有一个零,或者每个零包含多少个零?根据定义,当正则表达式引擎查看第一个字符时,唯一成功的匹配是字符low,nothing之前的0长度匹配。因为这是一个成功的匹配,它被传递给gsub替换X,然后扫描向前一步,然后再次开始。在Ruby中,空字符串并不是什么都不是。这很公平。我认为没有什么是有意义的,但在这里进行了澄清。你说除了任何东西以外的所有东西都是零,但是你怎么知道字符之间只有一个零,或者每个零包括多少个零?根据定义,当正则表达式引擎查看第一个字符时,唯一成功的匹配是字符IOW之前的0长度匹配,没有什么因为这是一个成功的匹配,它被传递给gsub替换X,然后扫描向前一步,然后再次开始。在Ruby中,空字符串并不是什么都不是。这很公平。我觉得没什么道理,但在这里澄清了一下。尤其是当你是初学者时,不要轻易怀疑这是一个bug。更可能是你的误解。谢谢你的回答。是的,我误解了这一点,但现在已经很清楚了。尤其是当你是初学者时,不要轻易怀疑这是一个bug。更可能是你的误解。谢谢你的回答。是的,我误解了这一点,但现在已经很清楚了。字母之所以保留,是因为指针在每次匹配后都会向前移动。@pguardiario您的意思是它们跳过字母并直接向前移动,是的,指针必须在匹配后向前移动。否则就没完没了的循环。字母之所以保留,是因为指针在每次匹配后都会向前移动。@pguardiario您的意思是它们跳过字母并直接向前移动,是的,指针必须在匹配后向前移动。否则就是无止境的循环。