このコードが正確に何をしているのか、perl の s* の意味は何ですか、このコードを書く他の方法はありますか。
my $group = join('","', split(/,\s*/, $tmp[4]))
このコードが正確に何をしているのか、perl の s* の意味は何ですか、このコードを書く他の方法はありますか。
my $group = join('","', split(/,\s*/, $tmp[4]))
,\s*
は、コンマ()で始まり、その後にゼロ個以上の()スペース文字( )が続く文字列に一致する正規表現パターンです。,
*
\s
split
このパターンを使用して、分割するセパレーターを検討する対象を決定します。たとえば、そのパターンでは、文字列foo,bar, baz
を3つの文字列foo
とに分割bar
しますbaz
。
以下は、Perl5.14.2およびUnicode6.0.0がスペース文字と見なすものです。
コンパイル可能なときのコードが次のようになっていると仮定します。
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 では意味を変えないところで括弧を使用できることを覚えておいてください。
これは、前の質問に対する回答のこの行の一部です
my $group = join('","',split(/,\s*/,$tmp[4]))
のように書いた方が良いと思います。
my $group = join ', ', map qq{"$_"}, $tmp[4] =~ /[^\s,]/g;
正規表現は、空白またはコンマではないすべての文字グループを抽出するため、文字列に適用するとTTT, TTC
、結果はTTT
and になりTTC
ます。はmap
、各項目を二重引用符で囲みます。そして、join
それらすべてを で区切られた単一の文字列に結合します,
。これは与える"TTT", "TTC"
前の 2 つの質問に対する私の回答を読みましたか? 唯一の問題は、モジュールをインストールしたくないということのようでした。その場合の代替案を書きました。
Rohl Jainに同意します。それはコードの断片です。ケースを思いつきました。
my $line = 'a,b, c, d,e';
my $newline = '"'.join('","',split(/,\s*/,$line)).'"';
print $newline;
これが出力です。"a"、"b"、"c"、"d"、"e"
カンマで区切られたデータ行を取得し、スペースの埋め込みを削除して、カンマで区切られ、二重引用符で囲まれた行を作成します。行の先頭と末尾に二重引用符を追加したことに注意してください。