2012-09-02 26 views
4

考虑下面的输入采用分体式功能答案:差异而在Ruby中

file1, length1, name1, title1 = line2.split(/,\s*/) 

我得到以下输出:

line1 = "Hey | Hello | Good | Morning" 
line2 = "Hey , Hello , Good , Morning" 
file1=length1=name1=title1=nil 

使用“”以如下分割字符串

puts file1,length1,name1,title1 

>Hey 
>Hello 
>Good 
>Morning 

但是,使用'|'到分割字符串我接收一个不同的输出:

file1, length1, name1, title1 = line2.split(/|\s*/) 
puts file1,length1,name1,title1 

>H 
>e 
>y 

这两个字符串是除了分离符号(在第一种情况下一个逗号和在第二种情况下的配管)相同。我使用的分割函数的格式也是相同的,当然,除了分隔字符之外。是什么导致这种变化?

回答

7

问题是因为|在正则表达式中有OR的含义。如果你想要文字字符,那么你需要转义它\|。所以,正确的正则表达式应该是/\|\s*/


目前,正则表达式/|\s*/意味着空字符串或一系列空白字符的。由于OR中首先指定的空字符串,正则表达式引擎会在每个字符处打断字符串(可以想象字符之间有空字符串)。如果将它交换为/\s*|/,那么在可能的情况下,空白将优先于空字符串,并且分割后的令牌列表中不会有空白。

+0

谢谢它回答了我的问题并清除了我的概念。 – randomuser15995183