1

私はかなりの範囲を検索しましたが、次のようなエントリで「AND」のようなものを除外する方法を見つけることができないようです:

トマトピューレ(水、トマトペースト)、キャラメル色、ソルビン酸カリウム、EDTAカルシウム二ナトリウム、糖蜜、コーンシロップ、砂糖、香辛料、タマリンド、ナチュラルフレーバー。

私の現在の正規表現文字列はすべてをキャッチできますが、「KOTASSIUM SORBATE」と「CALCIUM DISODIUM 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

正規表現を使用したい場合は、真実の解決策です。また、同時に空白も処理します。

正規表現を理解していない場合は、代替ソリューションとして次のことができます。

  1. それぞれの「 AND 」をカンマに置き換えます
  2. コンマ区切りを使用して文字列を要素に分割する

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

このソリューションでは、操作できるはずの単純な文字列関数を使用します。

最後に、関数trimを使用して不要な空白文字を削除したい場合があります。

于 2012-06-16T21:40:16.740 に答える
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 に答える