ホームページ >バックエンド開発 >Golang >Go で大文字と小文字を区別しない正規表現を効率的に作成するにはどうすればよいですか?

Go で大文字と小文字を区別しない正規表現を効率的に作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 20:41:18554ブラウズ

How Can I Efficiently Create Case-Insensitive Regular Expressions in Go?

Go での大文字と小文字を区別しない正規表現

次のコードに示すように、ユーザー入力から正規表現を構築するシナリオを考えてみましょう。

reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \._-]", -1))

ここで、s.Name は「北北西」のような文字列です。文字を反復処理し、大文字と小文字を区別しない式を手動で構築することを検討することもできます。

for i := 0; i < len(s.Name); i++ {
  if s.Name[i] == " " {
    fmt.Fprintf(str, "%s[ \._-]", str);
  } else {
    fmt.Fprintf(str, "%s[%s%s]&quot;, str, strings.ToLower(s.Name[i]), strings.ToUpper(s.Name[i]))
  }
}

ただし、より効率的な解決策があります。

大文字と小文字を区別しないフラグを使用する

検索の先頭にフラグ (?i) を追加することで、大文字と小文字を区別しない検索を指定できます。 regex:

reg, err := regexp.Compile("(?i)"+strings.Replace(s.Name, " ", "[ \._-]", -1))

固定正規表現の場合、このフラグは次のように使用できます:

r := regexp.MustCompile(`(?i)CaSe`)

正規表現フラグの詳細については、regexp/syntax パッケージのドキュメントを参照してください。

以上がGo で大文字と小文字を区別しない正規表現を効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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