101

もちろん、のように両方の場合を処理する正規表現を書くこともできますregexp.Compile("[a-zA-Z]")が、正規表現はユーザーが指定した文字列から作成されます。

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

名前はどこですかs.Name。これは「NorthbyNorthwest」のようなものである可能性があります。さて、私にとって最も明白な解決策は、の各文字をウォークスルーし、各文字に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]))
  }
}

しかし、これはかなりエレガントではない解決策だと思います。速度はそれほど問題ではありませんが、別の方法があるかどうかを知る必要があります。

4

4 に答える 4

208

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

"(?i)"これを行うには、正規表現の先頭に追加します。

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

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

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

フラグの詳細については、 regexp/syntaxパッケージのドキュメント(または構文のドキュメント)で「フラグ」という用語を検索してください。

于 2013-03-10T19:23:17.963 に答える
34

パターンの先頭にaを追加し(?i)て、大文字と小文字を区別しないようにすることができます。

参照

于 2013-03-10T19:22:37.160 に答える
8

私はGoにあまり精通していませんが、この例によると:http: //play.golang.org/p/WgpNhwWWuW

正規表現ステートメントの前にプレフィックスを付ける必要があります(?i)

于 2013-03-10T19:22:48.563 に答える
4

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)
于 2013-03-10T19:24:16.320 に答える