[解決済み] 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
パッケージのドキュメント
(または
構文ドキュメント
)
を参照してください。
関連
-
[解決済み] 正規表現でのコロン記号の使用
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 2回目以降で一致する
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 有効な正規表現を検出するための正規表現はありますか?
-
[解決済み】re.compileを使わずに大文字小文字を区別しない正規表現?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】regex オプションのワードマッチ
-
[解決済み] /bb|[^b]{2}/ どのように機能するのですか?[クローズド]
-
[解決済み] 与えられた文字列が与えられた部分文字列を含んでいるかどうかを見つけるための、scala の慣用的な方法は何ですか?
-
[解決済み] 小数点以下2桁までの値にマッチする正規表現
-
[解決済み] 2回目以降で一致する
-
[解決済み] RegEx: 引用符で囲まれた値を取得する
-
[解決済み] 標準的な10桁の電話番号にマッチする正規表現
-
[解決済み] Regex for string contains?
-
[解決済み] 正規表現で複数行にまたがる任意の文字にマッチさせるにはどうしたらよいですか?
-
[解決済み] Githubの「ブランチ名パターン」の否定