как я могу разделить строку с cammas, не погруженных в брекеты, скобки и qutations из строки с PHP
ответ
Один из способов будет использовать 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 также.
спасибо, но, возможно, не стоит вокруг camma –
@MortazaFaryabi: Я так догадался - пожалуйста, предоставьте более реалистичные строки ввода, возможно, мы сможем помочь с вышеупомянутым '(* SKIP) (* FAIL)'. – Jan
Итак, как php разделяет аргументы в 'func ('name', 'family, address')," lorem ipsom, is ... ", ['name', 'part']' –
Попробуйте это:
$elements = explode(',', $string);
Есть несколько камней в каждой части по этим причинам взорвать не помогает мне –
Хорошо, можете отправить или поделиться здесь? Тогда я могу обновить u –
Не только это, строка может быть что угодно - представьте, что части строк являются аргументами функции php и могут быть разными –
Можете ли вы не просто использовать другой разделитель вместо запятой. вы можете использовать свой собственный разделитель и просто использовать функцию разрыва. например, explode («custom_separator», $ str) – SJB
@SJB этот путь - это просто проблема обхода || Я не могу использовать другой разделитель –