如何在PHP中将字符串拆分为不同的部分?

时间:2018-11-02 17:29:10

标签: php regex string

我在PHP中有3个字符串,其中包含具有两个参数的函数的测试输入列表。

我想解析字符串并获取各个参数值​​。

示例:

"a,b" => "a", "b"

"/"string_param1/", /"string_param2/""  => "string_param1", "string_param2"

"[list,1], [list,2]"   => "[list,1]", "[list,2]"

2 个答案:

答案 0 :(得分:1)

对于字符串1和3,您可以使用student_licenses函数以逗号分隔字符串,如下所示: explode

但是对于第二个字符串,您可以运行 $a = 'a,b'; $a_params = explode(',', $a); 来除去不需要的引号或反斜杠,以便可以使用str_replace

str_replace() documentation

explode() documentation

答案 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]',
  ),
)