2016-07-17 1 views
-7

--eddited--как я могу разделить строку с cammas, не погруженных в фигурных скобках, скобки и qutations из строки с PHP

как я могу разделить строку с cammas, не погруженных в брекеты, скобки и qutations из строки с PHP

+0

Не только это, строка может быть что угодно - представьте, что части строк являются аргументами функции php и могут быть разными –

+0

Можете ли вы не просто использовать другой разделитель вместо запятой. вы можете использовать свой собственный разделитель и просто использовать функцию разрыва. например, explode («custom_separator», $ str) – SJB

+0

@SJB этот путь - это просто проблема обхода || Я не могу использовать другой разделитель –

ответ

1

Один из способов будет использовать lookarounds:

<?php 

$data = <<<DATA 
func('name','family,address') , "lorem ipsom, is a..." , ['name','part'] 
DATA; 

$regex = '~(?<=\),(?=\h)~'; 

$parts = preg_split($regex, $data); 
print_r($parts); 
?> 


См. a working demo on ideone.com.

Даже еще лучше было бы (*SKIP)(*FAIL) механизм:

<?php 

$data = <<<DATA 
func('name','family,address') , "lorem ipsom, is a..." , ['name','part'] 
DATA; 

$regex = '~ 
      (\w+\([^)]+\) 
      | 
      "[^"]+" 
      | 
      \[[^]]+\] 
      (*SKIP)(*FAIL)) 
      | 
      \h*,\h* 
     ~x'; 

$parts = preg_split($regex, $data, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
print_r($parts); 
?> 

См a demo for this one on ideone.com также.

+0

спасибо, но, возможно, не стоит вокруг camma –

+0

@MortazaFaryabi: Я так догадался - пожалуйста, предоставьте более реалистичные строки ввода, возможно, мы сможем помочь с вышеупомянутым '(* SKIP) (* FAIL)'. – Jan

+0

Итак, как php разделяет аргументы в 'func ('name', 'family, address')," lorem ipsom, is ... ", ['name', 'part']' –

-1

Попробуйте это:

$elements = explode(',', $string); 
+1

Есть несколько камней в каждой части по этим причинам взорвать не помогает мне –

+1

Хорошо, можете отправить или поделиться здесь? Тогда я могу обновить u –