ホームページ  >  記事  >  バックエンド開発  >  Go の正規表現の一致が失敗するのはなぜですか?どうすれば修正できますか?

Go の正規表現の一致が失敗するのはなぜですか?どうすれば修正できますか?

DDD
DDDオリジナル
2024-11-24 22:19:18958ブラウズ

Why Does My Go Regular Expression Match Fail, and How Can I Fix It?

Go で正規表現のマッチングが失敗する

正規表現に遭遇すると、特に経験の浅い人にとっては困惑する可能性があります。 Go を使用する場合、Python などの他の言語と比べて構文や動作が微妙に異なるため、この問題はさらに悪化する可能性があります。具体的には、正規表現を使用して特定のパターンを照合しようとすると、ユーザーが課題に直面する可能性があります。

最近、Go で文字列を照合するときにユーザーが予期しない動作に遭遇するという、このようなシナリオが発生しました。正規表現は「^. =b0x[A-F][A-F]b$」として定義され、空ではない文字列の後に等号と 2 桁の 16 進数が続くパターンと一致することを目的としていました。

驚いたことに、Python では正しく動作しているにもかかわらず、正規表現は結果として false を返しました。詳しく調べると、正規表現文字列が生の文字列リテラルで囲まれていないことが判明しました。これは、Go での文字の解釈方法に影響します。

生の文字列リテラルを使用し、逆引用符 `` (通常の文字列リテラルではなく) で示します。 ") を引用符で囲み、文字列内のエスケープ シーケンスと特殊文字が解釈なしで文字通りに扱われることを保証します。この場合、生の文字列リテラルにより、バックスラッシュと16 進文字は意図された意味を保持するため、正規表現が目的のパターンに正しく一致するようになります。

次に示すように、正規表現文字列を生の文字列リテラルで囲むことにより、一致操作は正常に true を返しました。

var regex string = `^.+=\b0x[A-F][A-F]\b$`

この調整により、Go プログラムは指定された入力文字列から目的のパターンを正確に照合し、抽出するようになりました。

以上がGo の正規表現の一致が失敗するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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