我正在处理一个模板类,在尝试从字符串参数列表中解析出带引号的字符串列表时遇到问题。以字符串为例:
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null"';
我想出一个提取字符串“Hello m'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);