我在PHP中有3个字符串,其中包含具有两个参数的函数的测试输入列表。
我想解析字符串并获取各个参数值。
示例:
"a,b" => "a", "b"
"/"string_param1/", /"string_param2/"" => "string_param1", "string_param2"
"[list,1], [list,2]" => "[list,1]", "[list,2]"
答案 0 :(得分:1)
对于字符串1和3,您可以使用student_licenses
函数以逗号分隔字符串,如下所示:
explode
但是对于第二个字符串,您可以运行
$a = 'a,b';
$a_params = explode(',', $a);
来除去不需要的引号或反斜杠,以便可以使用str_replace
。
答案 1 :(得分:0)
您不能简单地使用explode()
,因为您还有其他需要考虑的因素。
preg_split()
是要执行变量爆炸时要调用的函数。
(*SKIP)(*FAIL)
在这种情况下是一种非常方便的技术,因为它会消耗“受保护的”子字符串,然后取消它们作为可能的分割点的资格。
, ?
(逗号-空格-问号)表示您希望在每个逗号后面都加一个空格。
代码:(Demo)
$test_strings = ['a,b', '/"string_param1/", /"string_param2/"', '[list,1], [list,2]'];
foreach ($test_strings as $string) {
$result[] = preg_split('~(?:\".*?\"|\[[^[]*])(*SKIP)(*FAIL)|, ?~', $string, -1, PREG_SPLIT_NO_EMPTY);
}
var_export($result);
输出:
array (
0 =>
array (
0 => 'a',
1 => 'b',
),
1 =>
array (
0 => '/"string_param1/"',
1 => '/"string_param2/"',
),
2 =>
array (
0 => '[list,1]',
1 => '[list,2]',
),
)