Re: [請益] 字串中連續逗號以空格隔開

作者: flu (Crazy Rhythm)   2020-04-29 21:11:57
use strict;
use warnings;
use feature qw/say/ ;
#方式1
my $str = "INIT, ,, ," ;
$str =~ s/\s+//g ;
#以下使用到的 (?<=) 是 lookbehind assertion
# 解釋起來意思是當看到","時,如果它之前也有","
# 那才匹配成功,
#而且取代時(?<=)裡的東西不會被取代,因為匹配到
# 的是(?<=)後的東西。再來是它像/^/, /$/ 一樣
# 不佔字元寬度,所以下次比對的開始位置只離一個
# 字元而已。如果用 /,,/ 比對,就會離兩個字元
say $str =~ s/(?<=,),/ $_/gr foreach qw/= ,/ ;
#方式2
my $str2 = "INIT,1,2,3,4" ;
for my $_s ($str, $str2){
say '-' x 30 ;
#關於split的第三個參數造成的差異
# 原po的例子剛好與perldoc裡舉的例子相似
my @tokens = split /,/, $_s, -1 ;
say join $_ , @tokens foreach ("= ", ", ") ;
}
__END__
#輸出
INIT, = = =
INIT, , , ,
作者: luncha (謝謝)   2020-04-29 23:08:00
感謝flu大,先消化一下!看來有很多細節要考慮兩個方法讓我學到lookbehind, join+foreach運用~感謝!
作者: herculus6502 (金麟豈是池中物)   2020-05-01 19:44:00

Links booklink

Contact Us: admin [ a t ] ucptt.com