我正在处理模板类,并试图从字符串参数列表中解析出带引号的字符串列表。举个例子字符串:用于在字符串中匹配双引号和/或单引号字符串的PHP正则表达式
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null"';
我在未来与提取字符串“Hello m'lady”和“空”正则表达式的问题。我已经得到的最接近是
$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);
您如何知道在上面给出的示例中的“m'lady”中的撇号包含在引号内 - 如果字符串中有更多的单引号,这会不会破裂? – 2010-07-10 17:09:19
这是有点我想解决的问题。 – buggedcom 2010-07-10 18:23:36