Regex Perl使用*&引用;
如果我像这样使用Regex Perl使用*&引用;,regex,string,perl,split,Regex,String,Perl,Split,如果我像这样使用split: my @split = split(/\s*/, $line); print "$split[1]\n"; 使用输入: catdog 我得到: a 但是,如果我在拆分中使用\s+,我会得到: dog 我很好奇为什么它们不能产生相同的结果?另外,按字符分割字符串的正确方法是什么 感谢您的帮助。*匹配0次或更多次。这意味着它可以匹配字符之间的空字符串+匹配1次或多次,这意味着它必须至少匹配一个字符 以下文件对此进行了说明: 如果模式匹配空字符串,则EXPR将在匹配位置
split
:
my @split = split(/\s*/, $line);
print "$split[1]\n";
使用输入
:
catdog
我得到:
a
但是,如果我在拆分
中使用\s+
,我会得到:
dog
我很好奇为什么它们不能产生相同的结果?另外,按字符分割字符串的正确方法是什么
感谢您的帮助。
*
匹配0次或更多次。这意味着它可以匹配字符之间的空字符串<代码>+匹配1次或多次,这意味着它必须至少匹配一个字符
以下文件对此进行了说明:
如果模式匹配空字符串,则EXPR将在匹配位置(字符之间)拆分
此外,当您使用空格分隔时,大多数情况下您确实希望使用文字空间:
.. split ' ', $line;
如下所述:
作为另一种特殊情况,“split”模拟
当模式被省略或是文字时,命令行工具awk
由单个空格字符组成的字符串(如“”或“\x20”,
但不是例如“/”)。在本例中,EXPR中的任何前导空格都是
在发生拆分之前删除,而将该模式视为
如果是“/\s+/”;特别是,这意味着任何连续的
空格(不仅仅是单个空格字符)用作分隔符。
但是,可以通过指定
模式“/”而不是字符串“”,因此只允许
单个空格字符作为分隔符
*
匹配0次或更多次。这意味着它可以匹配字符之间的空字符串<代码>+匹配1次或多次,这意味着它必须至少匹配一个字符
以下文件对此进行了说明:
如果模式匹配空字符串,则EXPR将在匹配位置(字符之间)拆分
此外,当您使用空格分隔时,大多数情况下您确实希望使用文字空间:
.. split ' ', $line;
如下所述:
作为另一种特殊情况,“split”模拟
当模式被省略或是文字时,命令行工具awk
由单个空格字符组成的字符串(如“”或“\x20”,
但不是例如“/”)。在本例中,EXPR中的任何前导空格都是
在发生拆分之前删除,而将该模式视为
如果是“/\s+/”;特别是,这意味着任何连续的
空格(不仅仅是单个空格字符)用作分隔符。
但是,可以通过指定
模式“/”而不是字符串“”,因此只允许
单个空格字符作为分隔符
\s*
实际上意味着零个或多个空白字符。在cat
中的c
和a
之间是零空格,产生您看到的结果
对于正则表达式引擎,字符串如下所示:
c
zero spaces
a
zero spaces
t
multiple spaces
d
zero spaces
o
zero spaces
g
按照此逻辑,如果使用
\s+
作为分隔符,它将只匹配cat
和dog
之间的多个空格 \s*
实际上意味着零个或多个空白字符。在cat
中的c
和a
之间是零空格,产生您看到的结果
对于正则表达式引擎,字符串如下所示:
c
zero spaces
a
zero spaces
t
multiple spaces
d
zero spaces
o
zero spaces
g
按照此逻辑,如果使用
\s+
作为分隔符,它将只匹配cat
和dog
之间的多个空格 如果要将字符串拆分为单个字符列表,则应使用空正则表达式模式进行拆分,如下所示
my $line = 'cat';
my @split = split //, $line;
print "$_\n" for @split;
my @split = unpack '(A1)*', $line;
输出
c
a
t
有些人喜欢像这样解包
my $line = 'cat';
my @split = split //, $line;
print "$_\n" for @split;
my @split = unpack '(A1)*', $line;
这会给出完全相同的结果。如果要将字符串拆分为单个字符列表,则应使用空正则表达式模式进行拆分,如下所示
my $line = 'cat';
my @split = split //, $line;
print "$_\n" for @split;
my @split = unpack '(A1)*', $line;
输出
c
a
t
有些人喜欢像这样解包
my $line = 'cat';
my @split = split //, $line;
print "$_\n" for @split;
my @split = unpack '(A1)*', $line;
这给出了完全相同的结果。啊,我明白了。谢谢,罗比。啊,我明白了。谢谢你,罗比。