正規表現で「awk」を使用する場合、「|」に対応する「AND」演算子は何ですか?

正規表現で「awk」を使用する場合、「|」に対応する「AND」演算子は何ですか?

私はこれが|論理的な「OR」演算子であることを知っています。~へ正規表現。しかし、同等の「AND」演算子は何ですか(再び、~へ正規表現)?

メモ:

  • これは、複数の式の「AND」演算子とは何の関係もありません&&
  • たとえば、 と の両方を/A&B/一致させるのと同じです。AB

答え1

私が慣れている正規表現スタイルにはそのような演算子はありません。両方の入力を一致させるには、どちらも特定の順序で必要に応じてORを書き込むか、2つの式を組み合わせて2つの順序のいずれかを許可AできますBA.*BB.*AA.*B|B.*A

または2つの別々のゲームをプレイしてください。たとえば、次のようになりますawk

awk '/A/ && /B/' file

または、両方のgrepインスタンスを手動で処理します。

grep A file | grep B

実際、正規表現ではAND演算子を使用する必要はありません。正規表現のアイデアは、文字列を記述することです。定義に従って一致させたい内容を正規表現に入れます。したがって、A または B の一致を許可するには OR が必要ですが、AND は基本的に正規表現に組み込まれています。正規表現で作成するすべての項目は一致する必要があるため、すべてがデフォルトでAND演算子で連結されるため、A専用ANDは意味がありません。

答え2

注:Stéphane Chazelasのコメントからわかるように、この回答は部分的に正規表現の実装するAND演算子が許可されます。以下の推論はまだ正確です。これらの演算子は、課す条件が互いに互換性があることを確認した場合にのみ意味があるからです。


私の考えにRegExesの-演算子に対応する"AND"はあり得ないというのが答えだと思います。|なぜなら、最終的に正規表現は入力文字列の文字レベルで一致を実行するためです(時には暗黙的に反復演算子を介して)。したがって、直接バンドルします。文字列の特定の場所へ(例えばこのQ&Aは同じような議論のためのものです。)。

ポイントは、次の形式の表現がある場合です(awkここでは質問のタイトルのために明示的な構文を使用しています)。

$0 ~ /something(A|B)somethingelse/

これには文字列が必要です。または、直後とA直前の特定のB場所でsomethingsomethingelseマッチ。反復演算子を含むパターンがある場合、位置要件はより動的になる可能性があります。

$0 ~ /[a-f]+(A|B)[0-9]+/

ABしかし、ポジションごとに発生または関連があることは依然として重要です。小文字のみを含むパターンの後にa... f(1)数字のみを含むパターンの前に0...9

対応する「AND」条件はありません。

$0 ~ /something(A&B)somethingelse/

これは、入力文字列が同じ場所におよびをA含む必要があることを意味するため、B明らかに機能しません。

したがって、 "AND"演算子が役に立つ唯一のユースケースは、文字列の一般的な属性を説明することです。ここで、A各必須属性は単一の正規表現で表すことができます。B「正確な絶対位置と相対位置」を入力する必要がありますが、これは再び複数の式を組み合わせる演算子を使用し、興味がないと言うこと&&ができ、もちろんこの回避策にはさまざまな代替式があります。@terdonの返信


(1) C以上で並べ替え

関連情報