2009-12-31 110 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

代码: $ ingredients = explode(',',preg_replace('/ \ s * \([^()] + \)/','',$ list)); 这是我得到的输出: Array([0] =>有机全麦面包[1] =>蒙特里杰克奶酪[2] =>荷尔蒙天然火腿(盐[3] => turbinado糖[4] =>乳酸) 这只是更换了第一个。 – Stephane 2009-12-31 22:52:22

+0

preg_replace_all不存在。你是在暗示我用preg_match_all? 的preg_replace应更换所有的比赛,这是我为什么我很困惑。 – Stephane 2009-12-31 23:28:11

+0

双括号是问题,谢谢你,新年快乐。 – Stephane 2009-12-31 23:56:50