взрывать запятые, но игнорировать запятые в скобках php - PullRequest
1 голос
/ 25 октября 2019

Я закончил с множеством ответов, но ничто не дает мне желаемого ответа.

Я хочу взорваться "Пиво - домашнее, еда - закуски (чипсы, соусы, орехи), пиво - импортное,UNCATEGORIZED "и результат должен быть таким:

Array
(
    [0] => Beer - Domestic
    [1] => Food - Snacks (chips,dips,nuts)
    [2] => Beer - Imported,
    [3] => UNCATEGORIZED
)

Это то, что я пытался

$string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
$keywords = preg_split("/(?<=\)),/", $string);

$keywords = preg_split("/[\s,]+/", $string);

preg_match_all(' /[^(,]*(?:([^)]+))?[^),]*/', $string, $matches);

preg_match_all('/[^(,\s]+|\([^)]+\)/', $string, $matches);

это дало мне следующий результат

    Array
(
    [0] => Beer - Domestic,Food - Snacks (chips,dips,nuts)
    [1] => Beer - Imported,UNCATEGORIZED
)

Все яхочу сделать это взорвать ',', которые не заключены в скобки

1 Ответ

3 голосов
/ 25 октября 2019

Мы можем внести небольшую поправку в вашу текущую логику разделения регулярных выражений, используя следующий шаблон:

,(?![^(]+\))

Это говорит о разделении на запятую, но только , если эта запятая невстречаются в терминах в скобках. Он работает с использованием отрицательной проверки, что мы не видим ) без предварительного просмотра (, что подразумевает, что запятая находится внутри (...) члена.

$string = "Beer - Domestic,Food - Snacks (chips,dips,nuts),Beer - Imported,UNCATEGORIZED";
$keywords = preg_split("/,(?![^(]+\))/", $string);
print_r($keywords);

Этоотпечатки:

Array
(
    [0] => Beer - Domestic
    [1] => Food - Snacks (chips,dips,nuts)
    [2] => Beer - Imported
    [3] => UNCATEGORIZED
)
...