究竟这段代码是干什么的,什么是perl的S *的意思意思,有没有其他的方式来编写代码。请解释的Perl代码
my $group = join('","', split(/,\s*/, $tmp[4]))
究竟这段代码是干什么的,什么是perl的S *的意思意思,有没有其他的方式来编写代码。请解释的Perl代码
my $group = join('","', split(/,\s*/, $tmp[4]))
,\s*
是regular expression pattern匹配字符串开始,接着是零个或更多个(*
)空格字符(\s
)逗号(,
)。
split
使用此模式来确定要考虑它应该分裂的分隔符。例如,对于该模式,将字符串foo,bar, baz
分成了三根弦foo
,bar
和baz
。
下面是什么的Perl 5.14.2和Unicode 6.0.0考虑空格字符:
非常感谢ikegami ... – user2079657 2013-02-17 21:29:31
更新了我的答案,包括对你所问的模式的作用的解释。 – ikegami 2013-02-17 21:53:12
假设你的代码时,编译样子:
my $test = "abc, xyz, mno";
print join('","', split(/,\s*/, $test));
它可以重新写为:
my $test = "abc, xyz, mno";
my @tokens = split /,\s*/, $test; # split $test on `,\s*`
print join '","', @tokens; # Join the array back on `","`.
什么是regex
手段已经被@ikegami在解释他的回答。
请记住,您可以在omit
的括号中更改Perl中的含义。
感谢Rohit澄清,我现在明白了...... – user2079657 2013-02-17 21:36:47
@ user2079657。不客气:) – 2013-02-17 21:38:00
这就是此行的一部分,从一个回答您的previous question
my $group = join('","',split(/,\s*/,$tmp[4]))
我认为这是更好写成
my $group = join ', ', map qq{"$_"}, $tmp[4] =~ /[^\s,]/g;
正则表达式翻出那大家还不字符的所有组t空白或逗号,所以当应用于字符串TTT, TTC
时,结果为TTT
和TTC
。 map
在每个项目周围放置双引号。 join
将它们全部加入到单个字符串中,由,
分隔。这给了"TTT", "TTC"
您是否阅读了我对前两个问题的回答?唯一的问题似乎是你不想安装一个模块,而且我已经为这种情况写了一个替代方案。
为什么这比拆分解决方案更好。对我来说似乎更加复杂。 – justintime 2013-02-17 23:35:36
@justintime:这是一个有趣的问题,但我认为将每个元素都用引号括起来,然后用逗号分隔,而不是用引号,逗号,引号将它们分开。 – Borodin 2013-02-18 01:16:21
我同意Rohl Jain。它是一个代码片段。我想出了一个案例。
my $line = 'a,b, c, d,e';
my $newline = '"'.join('","',split(/,\s*/,$line)).'"';
print $newline;
这是输出。 “a”,“b”,“c”,“d”,“e”
它需要一行逗号分隔的数据,删除空格填充,并创建一个逗号分隔的行和双引号封装。注意我在行的开头和结尾添加了双引号。
这甚至不是完整的行。你能至少完成它吗? – 2013-02-17 21:10:51
Rohit在正则表达式中解释s *的含义,您不需要全行... my $ group = join('','',split(/,\ s * /,$ genetic_codes [4]));任何方式,这是全线.... – user2079657 2013-02-17 21:31:32
是的。但你应该总是在SO上发布可编译的代码。这就是为什么我要求你完成它。 – 2013-02-17 21:32:42