2017-09-11 4 views
0

コンマ区切りの値を含む文字列を配列に分割したいと思います。 str_getcsvは良い選択肢ですが、値の先頭と末尾にあるエンクロージャー文字(")を削除します。私はエンクロージャの文字を保持したいと思います。文字列$str = 'foo,"bar","qwe,rty"'を考えてみましょう。 str_getcsv($str)戻りエンクロージャー文字を削除しないstr_getcsv

['foo', 'bar', 'qwe,rty'] 

私が持っていると思います

['foo', '"bar"', '"qwe,rty"'] 

私はこれをどのように達成することができますか?

+0

あなたが値 'おそらくCSVで、その後、あなたは「「バー」」'に適切に終端文字をエスケープする必要がある「バー」 ''(または 'を「表現したい場合は\ "bar \" "、どのCSV方言を使っているかによって異なります)。あなたが見ているのは、CSVパーサーの正しい動作です。 '...、bar"、...はCSVで '...、bar、...'を意味します。 – deceze

+0

ありがとう@deceze。実際、私はCSVで作業していません。カンマで区切った値の文字列を分割したいだけで、 'str_getcsv'は良い解決策のようです。 –

+1

これは、既存の標準化されたフォーマットでない場合には、おそらく独自のパーサーを作成する必要があります。 – deceze

答えて

0

試してみてください。この

$str = 'foo,"bar","qwe,rty"' 
$res = preg_split('/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $str,-1,PREG_SPLIT_DELIM_CAPTURE); 
+0

ありがとうございます。がんばったね!しかし残念なことに、値にエスケープされた引用符が含まれていると失敗します。例えば '' foo、\ "bar" 'などです。 –

関連する問題