私は分割したい文字列を持っています。しかし、セパレータは実行時に決定されるので、変数として渡す必要があります。`|`(パイプ)の分割が期待通りに機能しないのはなぜですか?
my @fields = split(/$delimiter/,$string);
のようなものは機能しません。何かご意見は?
入力:
abcd|efgh|23
予想される出力:
abcd
efgh
23
私は分割したい文字列を持っています。しかし、セパレータは実行時に決定されるので、変数として渡す必要があります。`|`(パイプ)の分割が期待通りに機能しないのはなぜですか?
my @fields = split(/$delimiter/,$string);
のようなものは機能しません。何かご意見は?
入力:
abcd|efgh|23
予想される出力:
abcd
efgh
23
それが正規表現での特殊文字だからあなたは、あなたの区切り文字をエスケープする必要があります。
オプション1:
$delimiter = quotemeta($delimiter);
my @fields = split /$delimiter/, $string;
オプション2:あなたは、 "区切り文字" を持っていない
my @fields = split /\Q$delimiter/, $string;
詳細については、 'perldoc perlretut'、' perldoc perlre'、/ \\ Q /を検索し、 'perldoc -f quotemeta'を見てください。 – shawnhcorey
'split'の引数は区切り文字ではなく、区切り文字です。 – tchrist
'perldoc -f split'に従っていません:" PATTERNと一致するものはすべて、フィールドを区切る区切り文字です。 " – Sean
あなたの入力、実際の出力、および出力は非常に有用な情報になると予想... – Sean
、あなたは "セパレータ"を持っています。 「区切り記号」は限界を示します。それは二重引用符のように両端にあります。 "セパレータ"は要素の間に入り、 "|"あなたの入力例では。 – tadmc
[Perlの正規表現で特殊文字を処理するにはどうすればいいですか?](http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim