引用符を保持しながらカンマを使用してテキストを分割する
カンマで区切られたテキストを解析するときは、引用符で囲まれた部分文字列内にカンマが出現する状況に対処することが重要です。この例のように:
123,test,444,"don't split, this",more test,1
分割デフォルトの String.split(",") メソッドを使用して、この文字列をコンマで区切ると、次の結果が得られます。
123 test 444 "don't split this" more test 1
ご覧のとおり、「分割しないでください、この」引用符内のコンマは、誤って解釈されます。 separator.
この問題に対処するには、より洗練されたアプローチが必要です。この場合、正規表現を使用して、偶数の二重引用符が続かないカンマで文字列を分割できます。これにより、引用符で囲まれた部分文字列内のカンマが区切り文字と間違われなくなります。
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
この正規表現では、次のロジックが使用されます。
(?=): 先読みという主張
言い換えると、この先読みは、現在のコンマの後に偶数の二重引用符が続くかどうか、および文字列の終わりが続くかどうかをチェックします。 、それは、カンマが引用符で囲まれた部分文字列内になく、それ以外の場合は区切り文字と見なされることを示します。無視されます。
正規表現の簡略化されたバージョンを使用することもできます。
str.split("(?x) , (?= (?: [^\"]* \" [^\"]* \" )* [^\"]* $ )");
このバージョンでは、正規表現の可読性を高めるために修飾子 (?x) が使用されます。空白文字は無視されます。
以上が引用符を保持したままカンマ区切りのテキストを分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。