str = " shssskkkk " r1 = %r|([^\s]*)| r1 =~ str $1
这样得出的结果为什么是空而不是"shssskkkk "? 如果表达式是
r1 = %r|([^\s])|
这样的话结果是“s” 我想根据贪婪匹配的原则加“*”应该是后面全部匹配才对。
换成([^\s]+)看看
([^\s]+)
#1 楼 @ywjno 换成 ([^\s]+) 结果是正常的“shssskkkk”
因为你给的正则匹配空字符串,而第一个空字符串在第一个空格之前
你可以看看所有的匹配都是什么:str.scan(r1).to_a
str.scan(r1).to_a
#3 楼 @luikore 明白了,十分感谢
#3 楼 @luikore 不好意思,我想错了,我的表达式应该是匹配非空字符串的意思呀。([^\s]) 的结果是“s”,但 ([^\s]*) 后就变成空了
#5 楼 @shixukai 我们说的 "空" 的意思不一样
你说的是由空格组成的字符串... 我说的空字符串是长度为 0 的字符串
然后 * 是可以匹配长度为 0 的字符串的
a* Zero or more of a a+ One or more of a
a* Zero or more of a
a+ One or more of a
空字符串应该匹配零个或多个非空字符