Rya*_*ley 0 regex variables perl split delimiter
我是Perl的新手,但根据我读过的文档,看起来Perl中的split函数要求使用正则表达式而不是字符串分隔符作为第一个参数,但我发现使用类似的东西print +(split(' ', $string))[0]
仍然是正确拆分字符串.
基于此,我试图使用变量分隔符(例如print +(split($var, $string))[0]
where $var = ' '
)并发现它不起作用.我究竟做错了什么?
谢谢!
编辑:对不起这个可怕的问题.我正在对带有前导空格的字符串运行此操作,发现split函数不喜欢前导空格.例如:
my $var = ' ';
print +(split($var, ' abc ddddd'))[0]
给出一个空白输出.$ var是否被解释为/$var/
split函数内部?
与
print +(split(' ', ' abc ddddd'))[0]
它给出了一个输出 abc
因此,当我阅读文档时,我假设我的变量将被视为文字字符串,而实际上它不是,因此领先的空白没有被删除.
分割文字空间时
split ' '
Run Code Online (Sandbox Code Playgroud)
您调用文档中描述的特殊情况.使用变量时
my $var = ' ';
split $var;
Run Code Online (Sandbox Code Playgroud)
这是一样的把这个变量正则表达式中:
split /$var/;
Run Code Online (Sandbox Code Playgroud)
这将拆分为单个空格,而不是同一个东西.例如,如果你有这个代码:
my $string = "foo bar baz";
my @literal = split ' ', $string;
my @space = split / /, $string;
Run Code Online (Sandbox Code Playgroud)
然后@literal
将包含"foo", "bar", "baz"
,而且@space
会包含"foo", "bar", "", "", "baz"
-空字段它已经对单个空格分开.
这是文档描述它的方式:
作为另一种特殊情况,当省略PATTERN或由单个空格字符组成的文字字符串(例如''或"\ x20",但不是例如/ /)时,split会模拟命令行工具awk的默认行为.在这种情况下,EXPR中的任何前导空格都会在拆分发生之前被删除,而PATTERN则被视为/\s + /; 特别是,这意味着任何连续的空格(不只是单个空格字符)都用作分隔符.但是,通过指定模式/ /而不是字符串""可以避免这种特殊处理,从而只允许单个空格字符作为分隔符.在早期的Perls中,这个特殊情况仅限于使用普通的""作为分割的模式参数,在Perl 5.18中.
请注意,如果您正在寻找' '
通过使用变量动态模拟拆分的方法,则可以/\s+/
改为使用.它不完全相同,因为它不会剥离前导空格,但是否则应该按预期工作.