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

私の正規表現否定セットが Go で機能しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 03:55:27453ブラウズ

 Why Isn't My Regex Negated Set Working in Go?

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

ユーザーは、否定セットを含む正規表現が機能しないという問題に遭遇しました。囲碁で期待されています。複数のオンライン正規表現パーサーで検証されたこの式は、特定のファイル拡張子で終わらない文字列と一致することを目的としていました。

^(.*\.(?!(htm|html|class|js)$))?[^.]

しかし、この式を Go で実装すると、異なる結果が得られました。ユーザーは式を単純化して否定セットを削除し、必要な一致を取得しました。

問題の理解

Go の正規表現エンジン RE2 は、次のようなルックアラウンド演算子をサポートしていません。否定的な先読み ?!本来の表現で使われています。このルックアラウンド サポートの欠如により、否定セットは無効になります。

解決策

文字列が 3 文字のファイル拡張子で終わるようにするために、ユーザーは次のように単純化できます。式 to:

\.\w{3}$

この式は、リテラルのピリオド、その後に 3 つの単語文字 (英数字とアンダースコア)、その後に続く文字列の末尾に一致します。これにより、元の式と同じ結果が効果的に得られますが、周囲演算子に依存する必要はありません。

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

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