我试图从这个格式代码中提取:
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);
,但我坚持这一点。
问题在于
有任何帮助吗? 提前谢谢。
答案 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}
)
{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()
值!)