2009-12-31 2 views
1

Тест строки:preg_split запятые не внутри скобок

Organic whole wheat bread, Monterey Jack Cheese (milk, cheese culture, salt), Hormel Natural Ham (salt, turbinado sugar, lactic acid (not from milk) 

Желаемый результат:

Array ( 
     [0] => Organic whole wheat bread 
     [1] => Monterey Jack Cheese 
     [2] => Hormel Natural Ham 
    ) 

Я не возражаю, если суб-компоненты появляются с исходной позиции (то есть, «Монтерей Джек сыр (молоко, сырная культура, соль) »), я просто не хочу их самостоятельно, потому что они не добавляют ингредиенты.

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

О, и в случае, если preg_split не является PHP-ориентированным, я использую PHP.

Заранее благодарен!

ответ

1

Я бы сначала удалить все скобки и их содержание:

$result = preg_replace('/\s*\([^()]+\)/', '', $subject); 

и затем preg_split() на остальных запятых. Это предполагает, что скобки не вложены.

Если скобки могут быть вложенными, вам нужно будет запускать это столько раз, сколько уровней гнездования. Каждый раз внутренняя скобка будет удалена.

+0

Код: $ components = explode (',', preg_replace ('/ \ s * \ ([^()] + \) /', '', $ list)); Это результат, который я получаю: Array ([0] => Органический хлеб из цельной пшеницы [1] => Монтерейский сыр-сыр [2] => Hormel Natural Ham (соль [3] => турбинадо сахар [4] => молочная кислота) Это только заменить первый. – Stephane

+0

preg_replace_all не существует. вы предлагаете мне использовать preg_match_all? preg_replace должны заменить все матчи, которые я почему я запутался. – Stephane

+0

двойные Паренс были проблемы. Спасибо и счастливый новый год. – Stephane

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