ホームページ  >  記事  >  バックエンド開発  >  正規表現の否定セットが Go で失敗するのはなぜですか?

正規表現の否定セットが Go で失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 03:14:27666ブラウズ

Why Does My Regex Negated Set Fail in Go?

正規表現の否定セットが Go で機能しない

この投稿では、Golang の文字列との一致に失敗する正規表現を調べます。オンラインの正規表現パーサーで行われます。この問題は、Go の標準ライブラリの正規表現エンジン RE2 で否定セットがサポートされていないことが原因です。

問題の正規表現は、次の文字列と一致するように設計されています。

  • ファイル拡張子で終わる(例: ".htm"、".html"、".class"、".js") をネガティブ セットとして使用します (つまり、これらの拡張子で終わらないでください)。
  • 記載されていない文字で終わるピリオド (.) ではなく負のセットで指定します。

Golang でこの式を実装しても、オンライン正規表現パーサーが示すのと同じ一致は生成されません。これは、Golang の標準ライブラリで使用される RE2 がサポートしていないためです。否定先読み演算子 (「?!」) のような先読み演算子。

この問題を解決するには、次の 2 つのオプションがあります。

  • 先読みサポート ライブラリを使用します。 「github.com/google/re2/regexp」パッケージなど、lookaround をサポートするライブラリを使用して否定先読みを実装できます。
  • 式を簡略化します。 If all we文字列が 3 文字のファイル拡張子で終わるようにする必要があるため、式を「.w{3}$」に簡略化できます。これは、文字列の末尾にあるリテラルのピリオドとそれに続く 3 文字に一致します。

これらのアプローチのいずれかを使用することで、Golang で目的のマッチング動作を実現できます。

以上が正規表現の否定セットが Go で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。