我已经搜索了很多,似乎无法找到一种方法来将“AND”之类的内容排除在如下条目中:
番茄泥(水、番茄酱)、焦糖色素、山梨酸钾和 EDTA 钙二钠、糖浆、玉米糖浆、糖、香料、罗望子、天然香料。
我当前的正则表达式字符串可以捕获所有内容,但我不知道如何让它拆分“山梨酸钾”和“乙二胺四乙酸钙二钠”。这是我所拥有的:
[\(,\)\s]*\s*([^,\)\(\.]+)\s*[\.,\)\s\(]
顺便说一句,这是在 PHP 中,我不想在找到匹配项后拆分它。
$text = 'TOMATO PUREE (WATER, TOMATO PASTE), CARAMEL COLOR, POTASSIUM SORBATE AND CALCIUM DISODIUM EDTA, MOLASSES, CORN SYRUP, SUGAR, SPICES, TAMARIND, NATURAL FLAVOR.';
$array = preg_split('/\)?, | \(|, | AND |\./', $text, -1, PREG_SPLIT_NO_EMPTY);
var_dump($array);
array(13) {
  [0]=>
  string(12) "TOMATO PUREE"
  [1]=>
  string(5) "WATER"
  [2]=>
  string(12) "TOMATO PASTE"
  [3]=>
  string(13) "CARAMEL COLOR"
  [4]=>
  string(17) "POTASSIUM SORBATE"
  [5]=>
  string(21) "CALCIUM DISODIUM EDTA"
  [6]=>
  string(8) "MOLASSES"
  [7]=>
  string(10) "CORN SYRUP"
  [8]=>
  string(5) "SUGAR"
  [9]=>
  string(6) "SPICES"
  [10]=>
  string(8) "TAMARIND"
  [11]=>
  string(14) "NATURAL FLAVOR"
}
    我懂了:
$str = "TOMATO PUREE (WATER, TOMATO PASTE), CARAMEL COLOR, POTASSIUM SORBATE AND CALCIUM DISODIUM EDTA, MOLASSES, CORN SYRUP, SUGAR, SPICES, TAMARIND, NATURAL FLAVOR.";
$array = preg_split("/\s*(,|AND)\s*/i", $str);
print_r($array);
输出:
Array
(
    [0] => TOMATO PUREE (WATER
    [1] => TOMATO PASTE)
    [2] => CARAMEL COLOR
    [3] => POTASSIUM SORBATE
    [4] => CALCIUM DISODIUM EDTA
    [5] => MOLASSES
    [6] => CORN SYRUP
    [7] => SUGAR
    [8] => SPICES
    [9] => TAMARIND
    [10] => NATURAL FLAVOR.
)
    如果您想使用正则表达式,那么真相解决方案就是其中之一。它还同时处理空白。
如果您不了解正则表达式,作为替代解决方案,您可以:
使用逗号分隔符将字符串拆分为元素
$array = preg_split(",", str_replace(" AND ", ",", $str)); 
此解决方案使用您应该能够使用的简单字符串函数。
最后,您可能希望使用功能trim删除不需要的空白字符。