テンプレートクラスに取り組んでいますが、文字列引数リストから引用符で囲まれた文字列のリストを解析しようとすると問題が発生します。たとえば、文字列を見てください。
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null"';
文字列「Hellom'lady」と「null」を抽出する正規表現を思い付くのに問題があります。私が持っている最も近いものは
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null", \'TE\'ST\'';
preg_match_all('/(?:[^\']|\\\\.)+|(?:[^"]|\\\\.)+/', $string, $matches);
print_r($matches);
どの出力:
Array
(
[0] => Array
(
[0] => VAR_SELECTED,
[1] => 'Hello m'lady',
[2] => "null",
[3] => 'TE'ST'
)
)
ただし、次のより複雑なケース:
$string = 'VAR_SELECTED, \'Hello "Father"\', "Hello \'Luke\'"';
preg_match_all('/(?:[^\']|\\\\.)+|(?:[^"]|\\\\.)+/', $string, $matches);
print_r($matches);
出力:
Array
(
[0] => Array
(
[0] => VAR_SELECTED,
[1] => 'Hello
[2] => "Father"
[3] => ',
[4] => "Hello
[5] => 'Luke'
[6] => "
)
)
誰かが私がこの問題を解決するのを手伝ってもらえますか?複数の正規表現は今後の方向性ですか?
編集文字列内のコンマをプレースホルダーに置き換えてから、文字列を分解して分解する方が簡単かもしれません。
編集2単純な安全でないオプション(私は使用しません)を考えましたが、E_NOTICEエラーが生成されます。
$string = 'return array(VAR_SELECTED, \'Hello , "Father"\', "Hello \'Luke\'4");';
$string = eval($string);
print_r($string);