[英]split a comma separated string (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);
,但我對此感到困惑。 問題出在逗號里面
有什么幫助嗎? 提前致謝。
在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)
將匹配開始和結束標記之間的所有文本,並跳過該文本。
為什么不完成解決方法
$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}"
}
您可能只是利用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()
值!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.