まず、次のことを試してください。
WHERE REGEXP_LIKE(ITEM, '^Product1.*(green|red|blue)')
また
WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue)')
また
WHERE REGEXP_LIKE(ITEM, '^Product1 +(green|red|blue)')
の後に何を期待するかに応じてProduct1
- 最初のケースでは任意の種類の 0 個以上の文字が許可され、2 番目のケースでは の後に単一のスペースが必要でProduct1
あり、3 番目のケースでは の後に 1 つ以上の空白が必要Product1
です。
2番目の場所で正確にどこに行くのかわかりません。「Commerce」で始まり、その後にスペースが続き、その後に句読点、別のスペース、そして何かが続く文字列が本当に必要な場合は、試してください
WHERE REGEXP_LIKE(JOB, '^Commerce [:punct:] .*');
句読点の代わりに「:」または「-」を探している場合は、
WHERE REGEXP_LIKE(JOB, '^Commerce [:-] .*');
私は正規表現の専門家ではありませんが、いくつかの説明を提供しようとします。
^
次の要素が文字列の先頭にある必要があります。したがって、最初のケースで^Product1
は、「'Product1' は文字列の先頭にある必要があります」という意味になります。
- 正規表現では、式をグループ化するために括弧が使用されるため、最初のケース
(green|red|blue)
では一緒にグループ化されます。
|
は論理 OR であるため、(green|red|blue)
「'green' または 'red' または 'blue' のいずれかでなければならない」ことを意味します。
- 角括弧は文字クラスに使用されます。:punct: や :space: などの事前定義されたクラスを使用するか、 のように独自のクラスを作成できます
[:-]
。正規表現の解釈中、角括弧文字クラスは、長さに関係なく、一致する文字列内の 1 文字を表します。したがって、正規表現^Commerce [:-] .*
では、文字クラス[:-]
は「コロンまたはダッシュを探す」ことを意味します。クラス内の複数の文字が次々に出現することを期待していることを示したい場合は、クラスの後に繰り返し演算子 (*
または+
) の 1 つを使用します。これ[abc]*
により、すべての に一致しますabcabcabc
。
また、正規表現ではすべての文字が何かを意味するため、正規表現を読みやすくするために空白を使用することはできません。空白は、式が解釈されるときに検索されるものになるためです。
共有してお楽しみください。
編集
以前の質問に気づきませんでしAND
た。複数の式を AND で結合する簡単な方法は、それらを 1 つずつ並べることです。(green|red|blue) の後にスペースが続き、その後に (green|red|blue) が続く単純な式は次のようになります。
WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue) (green|red|blue)')
色の間に複数のスペースが許可される可能性がある場合
WHERE REGEXP_LIKE(ITEM, '^Product1 (green|red|blue) +(green|red|blue)')
使用することができます。
抵抗は無駄です。