我刚刚熟悉了\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-A
和Part-B
中运行的逻辑,将输出设为5
和4
只是想澄清我的想法。inPart-A
5
表示anon-word character
,但也不是。我只想知道
a non- white space charater
如何处理IRB
中的这些语句?谢谢
最佳答案
当正则表达式中有\W\S
时,您实际上是在说:“在字符串中找到一个匹配项,其中一个字符是非单词字符,后跟一个非空格字符。”
在Confusion A
中,第一个非单词字符是第一个空格(在索引5处)。紧接着的下一个字符是d
,它是一个非空格字符这是一个匹配项,因此返回5,因为这是匹配开始的索引。
同样,对于\S\W
来说,第一个非空格字符是a
,但是后面紧跟着b
这是一个单词字符,所以匹配还不起作用。一旦它到达2
(位置4),它将匹配一个非空格字符,后面跟着一个非单词字符的空格。