【发布时间】:2010-07-10 16:55:44
【问题描述】:
我正在开发一个模板类,但在尝试从字符串参数列表中解析出带引号的字符串列表时遇到了问题。以字符串为例:
$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);
【问题讨论】:
-
您怎么知道“m'lady”中的撇号包含在您上面给出的示例中的引号内 - 如果字符串中有更多的单引号,这不会崩溃吗?跨度>
-
这就是我想要解决的全部问题。
标签: php regex string preg-match-all