2011-03-28 10 views
10

私は分割したい文字列を持っています。しかし、セパレータは実行時に決定されるので、変数として渡す必要があります。`|`(パイプ)の分割が期待通りに機能しないのはなぜですか?

my @fields = split(/$delimiter/,$string);のようなものは機能しません。何かご意見は?


入力:

abcd|efgh|23 

予想される出力:

abcd 
efgh 
23 
+2

あなたの入力、実際の出力、および出力は非常に有用な情報になると予想... – Sean

+5

、あなたは "セパレータ"を持っています。 「区切り記号」は限界を示します。それは二重引用符のように両端にあります。 "セパレータ"は要素の間に入り、 "|"あなたの入力例では。 – tadmc

+0

[Perlの正規表現で特殊文字を処理するにはどうすればいいですか?](http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

答えて

19

それが正規表現での特殊文字だからあなたは、あなたの区切り文字をエスケープする必要があります。

オプション1:

$delimiter = quotemeta($delimiter); 
my @fields = split /$delimiter/, $string; 

オプション2:あなたは、 "区切り文字" を持っていない

my @fields = split /\Q$delimiter/, $string; 
+0

詳細については、 'perldoc perlretut'、' perldoc perlre'、/ \\ Q /を検索し、 'perldoc -f quotemeta'を見てください。 – shawnhcorey

+2

'split'の引数は区切り文字ではなく、区切り文字です。 – tchrist

+0

'perldoc -f split'に従っていません:" PATTERNと一致するものはすべて、フィールドを区切る区切り文字です。 " – Sean

関連する問題