Elasticsearchのネガティブな先読み正規表現

レジナルドソアレス

Elasticsearchクエリでネガティブルックアヘッドを実行しようとしています。正規表現は次のとおりです。

(?!.*charge)(?!.*encode)(?!.*relate).*night.*

私が照合しているテキストは次のとおりです。

まだ建設に問題がありますが、夜の滞在でクレジットされます。化学薬品が噴霧されることにより健康上の問題を引き起こし、目を刺激します。

運が悪かった。誰かが手を差し伸べることはできますか?

ENクエリ:

  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must_not": [
            {
              "regexp": {
                "message": {
                  "value": "(?!.*charge)(?!.*encode)(?!.*relate).*night.*",
                  "flags_value": 65535
                }
              }
            }
          ]
        }
      },
      "filter": {
        "match": {
          "resNb": {
            "query": "462031152161",
            "type": "boolean"
          }
        }
      }
    }
  }
WiktorStribiżew

解決

次の2つのいずれかで問題を解決できます。

"value": "~(charge|encode|relate)night~(charge|encode|relate)",

または

.*night.*&~(.*(charge|encode|relate).*)

オプション付き(デフォルトでオンになっているため

"flags" : "ALL"

それはどのように機能しますか?

一般的なNFA正規表現では、通常、より一般的なパターン((?!...)またはのように見えるもの(?<!...)を制限するのに役立つ否定的なルックアラウンドがありますただし、ElasticSearchでは、特定のオプションの演算子を使用する必要があります

~(チルダ)は補数*右のそれの後に原子を否定するために使用されます。アトムは、単一のシンボル、またはグループ内のサブパターン/代替のグループのいずれかです。

NOTEすべてのESパターンは、デフォルトでは文字列の先頭と最後に固定されていることを、あなたは使用する必要はありません^し、$Perlの様および.NETで共通、およびその他のNFA。

したがって、

  • ~(charge|encode|relate)-以外の文字列の先頭から任意のテキストに一致しchargeencodeかつrelate
  • night -単語に一致します night
  • ~(charge|encode|relate) -文字列の最後までの3つの部分文字列のいずれか以外のテキストに一致します。

PerlのようなNFA正規表現では、強化された貪欲なトークンを使用してそのパターンを書くことができます

/^(?:(?!charge|encode|relate).)*night(?:(?!charge|encode|relate).)*$/

2番目のパターンは注意が必要です。通常、一般的なNFA正規表現は、一致するときに場所から場所にジャンプしないため、テキストの先頭に固定された先読みが一般的に使用されます。ここでは、使用してINTERSECTION我々はわずか2つのパターンを使用することができ、1が文字列にマッチされると、二つ目は、文字列と一致している必要があります。

  • .*night.*-行全体(として一致.マッチ任意のシンボルが、改行、他に、使用(.|\n)*して)nightその中に
  • &-そして
  • ~(.*(charge|encode|relate).*)- chargeencodeおよびrelate部分文字列を含まない行

NFAPerlのような正規表現は次のようになります

/^(?!.*(charge|encode|relate)).*night.*$/

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネガティブな先読み正規表現の問題

分類Dev

正規表現とネガティブな先読み

分類Dev

ネガティブな先読みのあるPython正規表現

分類Dev

単一正規表現でのネガティブな先読み

分類Dev

Wordのネガティブな先読みを持つ正規表現

分類Dev

正規表現でネガティブな先読みを制限する方法

分類Dev

ネガティブな先読みに代わる正規表現

分類Dev

正規表現:ネガティブな先読みを乗り越える

分類Dev

正規表現の文字の特別な組み合わせのネガティブな先読み

分類Dev

正規表現のネガティブ先読みの実装(Python)

分類Dev

Java正規表現は、ネガティブな先読みで抽出するのに役立ちます

分類Dev

Monaco-editorがネガティブな先読み正規表現を正しく評価しない

分類Dev

ネガティブな後読みのあるphpの正規表現

分類Dev

ネガティブな先読みに基づいて失敗するには正規表現全体が必要

分類Dev

ネガティブな先読みを伴うScala正規表現マルチラインマッチ

分類Dev

正規表現でネガティブな先読みに苦しんでいる

分類Dev

複数のネガティブ先読みに一致する正規表現

分類Dev

キャプチャグループの正規表現ネガティブ先読み

分類Dev

正規表現のネガティブな先読みでグループ全体をキャプチャしない方法

分類Dev

if / else条件での正規表現ポジティブ先読み

分類Dev

正規表現の条件付きポジティブ先読み

分類Dev

ネガティブな後読みと未知の中間セクションPHPを使用した正規表現

分類Dev

ブランチをネガティブおよびポジティブの先読み正規表現と一致させる方法は?

分類Dev

正規表現でオプションのネガティブ先読みを説明するにはどうすればよいですか?

分類Dev

複数の一致正規表現ポジティブ先読み

分類Dev

正規表現のポジティブな先読みに似たLuaパターン?

分類Dev

正規表現:ネガティブな後読みの繰り返しをスキップすることは可能ですか?

分類Dev

ネガティブな後ろ向きのRでの正規表現

分類Dev

試合後のネガティブな先読み

Related 関連記事

  1. 1

    ネガティブな先読み正規表現の問題

  2. 2

    正規表現とネガティブな先読み

  3. 3

    ネガティブな先読みのあるPython正規表現

  4. 4

    単一正規表現でのネガティブな先読み

  5. 5

    Wordのネガティブな先読みを持つ正規表現

  6. 6

    正規表現でネガティブな先読みを制限する方法

  7. 7

    ネガティブな先読みに代わる正規表現

  8. 8

    正規表現:ネガティブな先読みを乗り越える

  9. 9

    正規表現の文字の特別な組み合わせのネガティブな先読み

  10. 10

    正規表現のネガティブ先読みの実装(Python)

  11. 11

    Java正規表現は、ネガティブな先読みで抽出するのに役立ちます

  12. 12

    Monaco-editorがネガティブな先読み正規表現を正しく評価しない

  13. 13

    ネガティブな後読みのあるphpの正規表現

  14. 14

    ネガティブな先読みに基づいて失敗するには正規表現全体が必要

  15. 15

    ネガティブな先読みを伴うScala正規表現マルチラインマッチ

  16. 16

    正規表現でネガティブな先読みに苦しんでいる

  17. 17

    複数のネガティブ先読みに一致する正規表現

  18. 18

    キャプチャグループの正規表現ネガティブ先読み

  19. 19

    正規表現のネガティブな先読みでグループ全体をキャプチャしない方法

  20. 20

    if / else条件での正規表現ポジティブ先読み

  21. 21

    正規表現の条件付きポジティブ先読み

  22. 22

    ネガティブな後読みと未知の中間セクションPHPを使用した正規表現

  23. 23

    ブランチをネガティブおよびポジティブの先読み正規表現と一致させる方法は?

  24. 24

    正規表現でオプションのネガティブ先読みを説明するにはどうすればよいですか?

  25. 25

    複数の一致正規表現ポジティブ先読み

  26. 26

    正規表現のポジティブな先読みに似たLuaパターン?

  27. 27

    正規表現:ネガティブな後読みの繰り返しをスキップすることは可能ですか?

  28. 28

    ネガティブな後ろ向きのRでの正規表現

  29. 29

    試合後のネガティブな先読み

ホットタグ

アーカイブ