2009-12-31 5 views
1

chaîne de test:virgules preg_split pas à l'intérieur entre parenthèses

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

sortie souhaitée:

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

Cela ne me dérange pas si les sous-ingrédients apparaissent avec l'élément d'origine (par exemple, « fromage Monterey Jack (lait, culture du fromage, sel) ", je ne veux pas les utiliser seuls parce qu'ils ne sont pas des ingrédients ajoutés.

J'ai trouvé quelques autres questions ici que j'ai essayé d'appliquer à mon problème, mais je n'ai jamais eu la sortie attendue.

Oh, et dans le cas où preg_split n'est pas centré sur PHP, j'utilise PHP.

Merci d'avance!

Répondre

1

je voudrais d'abord supprimer toutes les parenthèses et leur contenu:

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

puis preg_split() sur les virgules restantes. Cela suppose que les parenthèses ne sont pas imbriquées.

Si des parenthèses peuvent être imbriquées, vous devrez exécuter cette opération autant de fois qu'il y a de niveaux d'imbrication. À chaque fois, la parenthèse la plus interne sera supprimée.

+0

Code: $ ingredients = exploser (',', preg_replace ('/ \ s * \ ([^()] + \) /', '', $ list)); Voici la sortie que j'obtiens: Array ([0] => Pain de blé entier biologique [1] => Monterey Jack Cheese [2] => Jambon naturel Hormel (sel [3] => sucre turbiné [4] => acide lactique) Il est seulement remplacer le premier. – Stephane

+0

preg_replace_all n'existe pas. vous suggérez que j'utilise preg_match_all? preg_replace devrait remplacer tous les matches que je suis pourquoi je confus. – Stephane

+0

double-parens étaient le problème Merci et bonne année. – Stephane

Questions connexes