1

我已经搜索了很多,似乎无法找到一种方法来将“AND”之类的内容排除在如下条目中:

番茄泥(水、番茄酱)、焦糖色素、山梨酸钾和 EDTA 钙二钠、糖浆、玉米糖浆、糖、香料、罗望子、天然香料。

我当前的正则表达式字符串可以捕获所有内容,但我不知道如何让它拆分“山梨酸钾”和“乙二胺四乙酸钙二钠”。这是我所拥有的:

[\(,\)\s]*\s*([^,\)\(\.]+)\s*[\.,\)\s\(]

顺便说一句,这是在 PHP 中,我不想在找到匹配项后拆分它。

4

3 回答 3

2

代码:

$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"
}
于 2012-06-16T21:45:12.633 回答
0

我懂了:

$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.
)
于 2012-06-16T21:31:54.760 回答
0

如果您想使用正则表达式,那么真相解决方案就是其中之一。它还同时处理空白。

如果您不了解正则表达式,作为替代解决方案,您可以:

  1. 用逗号替换每个 'AND'
  2. 使用逗号分隔符将字符串拆分为元素

    $array = preg_split(",", str_replace(" AND ", ",", $str)); 
    

此解决方案使用您应该能够使用的简单字符串函数。

最后,您可能希望使用功能trim删除不需要的空白字符。

于 2012-06-16T21:40:16.740 回答