1. ホーム
  2. regex

[解決済み] Go で大文字小文字を区別しない正規表現を行うにはどうしたらいいですか?

2022-12-03 17:38:17

質問

もちろん、両方のケースを処理するために、次のような正規表現を書くことができます。 regexp.Compile("[a-zA-Z]") のように書くこともできますが、私の正規表現はユーザーによって与えられた文字列から構築されます。

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

ここで s.Name は名前です。 これは「ノース・バイ・ノースウエスト」のようなものでしょう。 さて、私にとって最も明白な解決策は、各文字の s.Name の各文字を見て回り、それぞれの文字に「[nN]」と記述することです。

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

しかし、これはかなり非エレガントな解決策だと感じています。 速度はあまり気になりませんが、他の方法があるかどうかを知る必要があります。

どのように解決するのですか?

正規表現の最初の項目として、大文字小文字を区別しないフラグを設定することができます。

これを行うには "(?i)" を正規表現の先頭に加えることです。

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

固定正規表現の場合、次のようになります。

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

フラグに関する詳しい情報は regexp/syntax パッケージのドキュメント (または 構文ドキュメント ) を参照してください。