引用符で囲まれた部分文字列と引用符で囲まれていない部分文字列を含む文字列をPHPで分割したいと思います。
次の文字列があるとしましょう。
"this is a string" cat dog "cow"
分割された配列は次のようになります。
array (
[0] => "this is a string"
[1] => "cat"
[2] => "dog"
[3] => "cow"
)
私は正規表現に少し苦労していますが、1つの正規表現/preg_splitで達成することさえ可能かどうか疑問に思っています-Call...
私が最初に試したのは:
[[:blank:]]*(?=(?:[^"]*"[^"]*")*[^"]*$)[[:blank:]]*
ただし、これはarray[0]とarray[3]のみを正しく分割します。残りは文字ごとに分割されます。
次に、このリンクを見つけました:
区切り文字が引用符で囲まれていない限り、2つの区切り文字を含むPHPpreg_split
(?=(?:[^"]*"[^"]*")*[^"]*$)
これは私には良い出発点のように思えます。ただし、私の例の結果は、最初の正規表現の場合と同じです。
私は両方を組み合わせてみました-最初に引用符で囲まれた文字列用のもの、次に引用符で囲まれた文字列を省略すべき2番目のサブ正規表現(したがって[^ "]):
(?=(?:[^"]*"[^"]*")*[^"]*$)|[[:blank:]]*([^"].*[^"])[[:blank:]]*
したがって、2つの質問:
- たった1つのregex/preg_split-Callで私が望むことを達成することさえ可能ですか?
- はいの場合、正規表現を正しく組み立てる方法についてのヒントをいただければ幸いです。