正規表現を使用して文字列を除外するには?

正規表現を使用して文字列を除外するには?

testというファイルがあります。

http://edge.sharethis.com
http://edge.sharethis.com
https://timetosa.com
http://timetosa.com
https://webtest.es
holahttp.com
timetosa

timetosaを含む行を除外する式が必要です。

これは許可されません。cat test | grep -v timetosa他のプログラムで純粋な正規表現を使いたいからです。

私はそれが関連していることを知っていますが、^文字列timetosaを含まないことに影響を与える正しい解決策を見つけることができません。

cat test | sed 's/^[timetosa]//g'そしてcat test | sed 's/^(timetosa)//g'成功しませんでした。

誰でも私を助けることができますか?

答え1

sed '/timetosa/d' <test

...するつもりです。または:

sed -n '/timetosa/!p' <test

しかしそれにもかかわらず(許可可否):

grep -v timetosa <test

...3つのソリューションのうち、最もパフォーマンスの高いソリューションになり、大きな利点を持つことができます。

@Sparhawkのおかげで道を見つけました。zaproxy ドキュメント。基準:

  • URL正規表現
    • 内部に含む*,除く*パネルとログイン/ログアウト索引確認する除外されたURLを定義するために正規表現を入力できるパネル。

...そして、次はフィルタリングしようとしているようです。コンテキスト?マニュアルによれば、次のことを同時に実行できます。そして除外リスト:

  • 文脈から除外
    • これにより、コンテキストから除外されるURLを管理できます。
    • 含めたくありませんが、1つ以上の一致するURLに正規表現を指定するだけです。含む正規表現。

したがって、除外できます。一部以前に含めたもの。

それでも、これが最初のポイントではないかもしれません。完全重要ではありません。これは文書にも記載されています。付加機能部分:

  • 通話申請

    • 選択したメッセージのURLなど、コンテキスト情報を渡して他のアプリケーションを呼び出すことができます。
    • たとえば、nmapスキャンしたいサイトを渡して呼び出すことができます。

    • アプリケーション構成の使用法オプション適用画面。

答え2

正規言語補数で閉じているため、すべての正規表現には、元の正規表現と一致しない入力と正確に一致する正規表現があります。

ただし、最悪の場合、補足言語に一致する最小の正規表現の長さは、元の正規表現の長さに指数関数的に増加します。したがって、正規表現が存在することは保証されますが、単純であるという保証はありません。可能アルゴリズムによる計算本当に必要な場合。

正規表現を固定する演算子^は関係ありません。 「小文字以外のすべての文字」^などの文字セットを考えることができます。[^a-z]これは文字セット短縮表記の一部にすぎず、文字列セットを補完するのに役立ちません。

Perl または互換性があり、広く使用されている PCRE などの一部の正規表現エンジンは、次のような既存の演算子以外の演算子をサポートします。アサーションを探る。否定的な予測アサーションは、正規表現を複数の部分に分割することなく否定する簡単な方法を提供します。サポートされている正規表現を確認するには、ソフトウェアのマニュアルを確認してください。

^(?!.*timetosa)

またはvim:

^(.*timetosa)\@!

ほとんどのシステムでは正規表現の補完は不要ですgrep -v。たとえば、match-invert フラグを使用するか、最初の一致設定でルールを慎重に並べ替えることで同じ効果を得ることができます(一致する場合は何もせずに.*timetosa.*一致を停止します)。ルール一致したら.*何かをしなさい)。

関連情報