ホームページ > バックエンド開発 > Golang > Go の正規表現が一致しないのはなぜですか?

Go の正規表現が一致しないのはなぜですか?

Barbara Streisand
リリース: 2024-11-18 20:59:02
オリジナル
309 人が閲覧しました

Why Doesn't My Go Regex Match?

Go で正規表現が機能しない: 問題を理解する

正規表現パターンは一見単純であるにもかかわらず、なぜ正規表現パターンが Go で一致しないのですか行く?問題を詳しく調べて解決策を見つけてみましょう。

元のコードと出力

次の Go コードを考えてみましょう。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    a := "parameter=0xFF"
    regex := "^.+=\b0x[A-F][A-F]\b$"
    result, err := regexp.MatchString(regex, a)
    fmt.Println(result, err)
}
ログイン後にコピー

驚くべきことに、出力は false で、一致が失敗したことを示します。これは、提供された入力とパターンに基づく一致の期待と矛盾します。

生の文字列を使って解決する
この問題を解決する鍵は、定義時に生の文字列リテラルを使用することにあります。正規表現パターン。生の文字列リテラルは、二重引用符 (") ではなく逆引用符 (`) で囲まれた一連の文字です。

生の文字列リテラルを使用すると、Go がバックスラッシュをエスケープ文字として解釈するのを防ぐことができます。これは非常に重要です。パターンには、特定の一致条件を定義するエスケープ シーケンス (b および x) が含まれているためです。

更新されたコード

生の文字列リテラルを使用すると、コードは次のようになります。

var regex string = `^.+=\b0x[A-F][A-F]\b$`
ログイン後にコピー

パターンの説明

更新されたパターンは、次の基準を満たす文字列と一致します。

  • 任意の数の文字 (. )
  • 等号 (=) が含まれます
  • その後に接頭辞 "0x" (b0x) が続きます
  • 2 つの 16 進文字 ([A-F][A-F]) が含まれます
  • 単語境界で終わります (b)

結論

生の文字列リテラルを使用することで、正規表現パターンが確実に解釈されるようにしますこれにより、意図どおりにパターンが目的の入力文字列と正確に一致するようになります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート