当使用Ruby拆分字符串时,/\t + |,/和/ [\ t +,] /之间的区别是什么?

Lia*_*ang 1 ruby regex split

我有一个用\t和分隔的字符串,,但是数字\t不固定,例如:

a=["seg1\tseg2\t\tseg3,seg4"]
Run Code Online (Sandbox Code Playgroud)

seg2并且seg3由两个分隔\t.

所以我试着把它们分开

a.split(/\t+|,/)
Run Code Online (Sandbox Code Playgroud)

它打印正确的anwser:

["seg1", "seg2", "seg3", "seg4"]
Run Code Online (Sandbox Code Playgroud)

我也试试这个

a.split(/[\t+,]/)
Run Code Online (Sandbox Code Playgroud)

但答案是

["seg1", "seg2", "", "seg3", "seg4"]
Run Code Online (Sandbox Code Playgroud)

为什么ruby打印出不同的结果?

mgi*_*nbr 5

因为\t+inside []并不意味着"一个或多个标签",它意味着"标签或加号".由于它找到两个连续的选项卡,它会分裂两次,中间的字符串变为空.

. + * ?放置在间隔中的大多数特殊字符(如等)将成为"常规"字符.有一些例外,例如^(在开头放置时否定间隔),\(逃脱下一个字符,就像在外部间隔一样)和](关闭间隔;另一个[也不允许) .所以,[\t+,]实际上意味着'\t' or '+' or ','.

不幸的是,我不知道在一个区间内需要或不需要转义的全套字符的引用.有疑问,我倾向于逃避只是为了确定.在任何情况下,间隔始终只与单个字符匹配,如果您想要不同的东西,则必须将量词放在间隔之外.(例如:[\t,]+如果你也连续允许两个逗号;否则,你的第一个正则表达式确实是正确的)