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