0

AND正しくない/論理ステートメントに一致する正規表現が必要ですがOR、たとえば引用符で囲まれている場合は一致しません。

次の場所に一致するものはありません:

MAR AND SATURN
MAR OR SATURN
"MAR AND SATURN"

ANDまたはORの両側に少なくとも 1 つの空白文字と 1 つの非空白文字があり、文字がORまたはで構成されていない場合、一致はありませんAND。したがって、たとえば ..R AND S.. は一致するべきではありませんが、一致する(OR) OR (OR)必要(AND) AND (AND)があります。

マッチ

  MARS AND SATURN [AND]
  MARS [OR]
  MARS [ OR ]
  [AND] AND [AND]
  [OR] [AND]
  [OR] [AND]
  [AND] [OR]
  [ AND ] [ OR ]

ANDor演算子の前、後、または両側に空白が含まれている例ORもありますが、これらも一致する必要があります。

私は.NETフレームワークを使用していますが、これが私が思いついたものです。ただし、複雑すぎるようです。単純化する方法が必要です。

(?!.*\"")(?<!(?:\bAND\b\s|\bOR\b\s))(?:\b(?:AND|OR)\b)(?=\s\b(?:AND|OR)\b)|(?<=\bAND\b\s|\bOR\b\s)(?:\b(?:AND|OR)\b)(?!\s\b(?:AND|OR)\b)|^\b(?:AND|OR)\b|(?:AND\s?|OR\s?)$|(?<=\()\s?(?:\bAND\b|\bOR\b)|(?<=\()(?:\bOR|\bAND)(?=\))|(?:\bOR|\bAND)(?=\))(?!.*\"")
4

1 に答える 1

0

これでうまくいくと思います:

^ *'[^']*' *$|^ *"[^"]*" *$|(\b(AND|OR)\b) +(?1)|(?1)\s*$|^\s*(?1)

デモ: https://regex101.com/r/nD9yR3/2

説明:

この正規表現は、間違った文字列に一致します!!!

  1. (?1)再帰的な正規表現用です。グループ 1 の正規表現を繰り返します。
  2. ^ *'[^']*' *$|^ *"[^"]*" *$|引用符内の文字列を無視するためのものです。グループ 0 ではなくグループ 1 の値を持つ場合、一致と見なされます。
于 2016-05-02T09:47:47.110 に答える