我已经搜索了很多,似乎无法找到一种方法来将“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删除不需要的空白字符。