当分隔符出现在字符串的开头时,在Perl中使用regexp拆分字符串



我想使用正则表达式拆分字符串,但我遇到了一些问题。我有这个字符串:

$text=" one two three";

然后我试着把它分成字母:

#@words=split(" ", $text);          #1 this works
@words=split("[^a-zA-Z]", $text);   #2 this doesn't work
for $word (@words){
    printf "word: |$word|n";
}

所以注释的方法(1)工作正常。如预期的那样,我得到打印:

word: |one|
word: |two|
word: |three|
然而,使用第二种方法(2)我得到这个:
word: ||
word: |one|
word: |two|
word: |three|

因此,尽管逻辑上第二个方法应该与第一个方法等效,但实际上它的行为方式并不相同。为什么呢?

这是Perl的split()函数中的一个特例。

如perldoc:

所述

split(/PATTERN/, expr, [limit])

如果省略PATTERN,[它]在空格上分割(跳过任何)领先的空格)。

当有正宽度时,将产生空的前导字段匹配字符串的开头;[…)

作为一种特殊情况,指定一个PATTERN的空间(' ')将分裂为on空白就像没有参数的分割一样。因此,split(' ')可以将用于模拟awk的默认行为,而split(/ /)将用于模拟awk的默认行为给你尽可能多的初始空字段(空字符串)主要空间。

最新更新