もちろん、regexp.Compile("[a-zA-Z]")
などの両方のケースを処理するために正規表現を書くこともできますが、正規表現はユーザーが指定した文字列から作成されます。
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
どこ s.Name
は名前です。 「North by Northwest」のようなものかもしれません。さて、私にとって最も明らかな解決策は、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
「フラグ」という用語のパッケージドキュメント(または 構文ドキュメント )。
パターンの先頭に(?i)
を追加して、大文字と小文字を区別しないようにすることができます。
私はGoにあまり詳しくありませんが、この例によると http://play.golang.org/p/WgpNhwWWuW
正規表現ステートメントの前に(?i)
を付ける必要があります
i
フラグを使用します。ヒントを引用 ドキュメント :
グルーピング:
(re) numbered capturing group
(?P<name>re) named & numbered capturing group
(?:re) non-capturing group
(?flags) set flags within current group; non-capturing
(?flags:re) set flags during re; non-capturing
フラグの構文は、xyz(設定)または-xyz(消去)またはxy-z(xyの設定、zの消去)です。フラグは次のとおりです。
i case-insensitive (default false)
m multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
s let . match \n (default false)
U ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)