根据perldoc,split的语法是:
split /PATTERN/,EXPR,LIMIT
但PATTERN
也可以是单引号或双引号字符串:split "PATTERN", EXPR
。它有什么不同?
编辑:我所知道的差异是分裂反斜杠:split /\\/
vs split '\\'
。第二种形式不起作用。
答案 0 :(得分:6)
看起来它使用它作为“指定模式的表达式”:
可以替换图案/ PATTERN / 用表达式来指定模式 在运行时变化。 (做运行时 只编译一次,使用 / $ variable / o。)
编辑:我用它测试了它:
my $foo = 'a:b:c,d,e';
print join(' ', split("[:,]", $foo)), "\n";
print join(' ', split(/[:,]/, $foo)), "\n";
print join(' ', split(/\Q[:,]\E/, $foo)), "\n";
除' '
特殊情况外,它看起来就像正则表达式。
答案 1 :(得分:2)
PATTERN
总是被解释为......好吧,一个模式 - 从不作为文字值。它可以是正则表达式 1 或字符串。字符串被编译为正则表达式。在大多数情况下,行为是相同的,但双重解释可能会产生微妙的差异。
字符串'\\'
只包含一个反斜杠。当解释为模式时,就好像你写了/\/
,这是无效的:
C:\>perl -e "print join ':', split '\\', 'a\b\c'"
Trailing \ in regex m/\/ at -e line 1.
糟糕!
此外,还有两种特殊情况:
//
,它分隔空字符串。' '
,在首次修剪任何空格后分割为空格
领先或尾随空白。 <子> 1。可以通过内联/.../
或通过预编译的qr//
引用字符串提供正则表达式。
答案 2 :(得分:1)
我相信没有区别。字符串模式也被解释为正则表达式。
答案 3 :(得分:1)
perl -e 'print join("-",split("[a-e]","regular"))';
r-gul-r
如您所见,分隔符被解释为正则表达式,而不是字符串文字。
所以,它大致相同 - 有一个重要的例外:split(" ",...
)和split(/ /,...
)不同。
我更喜欢使用/PATTERN/
来避免混淆,否则很容易忘记它是一个正则表达式。
答案 4 :(得分:0)
两条可观察的规则:
split(" ")
相当于split(/\s+/)
。split("something")
等于split(/something/)