2015-06-21 3 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}, name, 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() значения!)

Смежные вопросы