2015-06-21 259 views
0

我試圖從這個格式化代碼提取:拆分逗號分隔字符串(PHP +正則表達式)

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} 

分爲三個paramters像

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

爲什麼不完成你的方法來解決

$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}" 
} 
+0

感謝它的工作,並解決了這個問題。 –

+0

很高興幫助。不客氣 – splash58

+0

這是錯誤的。測試這個:'$ param ='{tag = name,100,type}文本文本,文本文本,文本文本,{/ tag},名稱,desc';' – anubhava

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)會匹配所有的起始和結束標記之間的文本,將跳過。

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() ing的值!)