混淆了Ruby 1.9.3中/ \ S \ W /和/ \ W \ S /的输出

时间:2013-01-17 07:14:04

标签: ruby regex ruby-1.9.3

我只是熟悉\W\S。现在我正在玩他们的行为,看看他们的行为如下:

> s="abd12 de 5t6"
=> "abd12 de 5t6"  #understood
> /\W/ =~ s
=> 5               #understood
> /\W\S/ =~ s
=> 5               #Confusion(A)             
> /\S\W/ =~ s
=> 4               #Confusion(B) 
> /\S/ =~ s  
=> 0               #understood
>  

Part-APart-B中运行的逻辑是什么,以便将输出设为54。只想在那里清除我的概念。在Part-A 5中表示non-word character,但也不是a non- white space charater

我只想知道IRB如何confusion - A and B处理此类陈述?

由于

1 个答案:

答案 0 :(得分:2)

当你的正则表达式中有\W\S时,你基本上是这样说:“在字符串中查找匹配字符为非字符的匹配项,后跟非太空人物。“

Confusion A中,第一个非单词字符是第一个空格(在索引5处)。紧随其后的下一个字符是d,它是非空格字符。这是一场比赛,因此返回5,因为那是比赛开始的指数。

同样,对于\S\W,第一个非空格字符为a,但后跟b这是一个单词字符,因此匹配不起作用。一旦到达2(位置4),它匹配非空格字符,后面跟着一个非单词字符的空格。