考虑一个从用户输入构造正则表达式的场景,如以下代码所示:
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \._-]", -1))
其中 s.Name 是一个类似“North by Northwest”的字符串。您可以考虑迭代字符并手动构造不区分大小写的表达式:
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 包文档中找到。
以上是如何在 Go 中高效创建不区分大小写的正则表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!