拆分逗号分隔的字符串(php + regex)

时间:2015-06-21 13:42:50

标签: php regex

我试图从这个格式代码中提取:

name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}

分为三个参数,如

name
desc
{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}

我已经得到了一些东西:  list($field1, $field2,$field3) = preg_split(' [,] ', $param);,但我坚持这一点。 问题在于

中的逗号

有任何帮助吗? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

在PHP中你可以这样做:

$s = 'name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}';

$arr = preg_split('~{tag=.+?{/tag}(*SKIP)(*F)|\h*,\h*~', $s);

print_r($arr);

<强>输出:

Array
(
    [0] => name
    [1] => desc
    [2] => {tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}
)

RegEx Demo

{tag=.+?{/tag}(*SKIP)(*F)将匹配起始标记和结束标记之间的所有文本,并将跳过该标记。

答案 1 :(得分:0)

为什么没有完成解决问题的方法

$param = "name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}";

$s = split(',', $param);
$s[2] = implode(',', array_splice($s,2));
var_dump($s);

array(3) {
  [0]=>
  string(4) "name"
  [1]=>
  string(5) " desc"
  [2]=>
  string(120) "{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}"
}

答案 2 :(得分:0)

你可以只使用explode()函数的第三个参数(你只需要用逗号分隔的三个字符串,所以只需告诉explode()函数!):

<?php
$str = 'name, desc,{tag=name,100,type}text text,text text,text text, {/tag}{tag=name,100,type}text text,text text,text text,text text{/tag}';

$arr = array_map(
        function($v) { return trim($v); },
        explode(',', $str, 3) // <-- Actually, this statement is the only thing you need :) 
       );

echo '<pre>';
print_r($arr);
echo '</pre>';

array_map()功能的使用仅限于美观! (对于trim()值!)