现在,当然,我可以编写我的正则表达式来处理这两种情况,例如regexp.Compile("[a-zA-Z]"),但我的正则表达式是由用户给出的字符串构造的:
reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))
Run Code Online (Sandbox Code Playgroud)
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]))
}
}
Run Code Online (Sandbox Code Playgroud)
但我觉得这是一个相当不优雅的解决方案.速度并不是真正的问题,但我需要知道是否还有另一种方式.
Dan*_*iel 146
您可以将不区分大小写的标志设置为正则表达式中的第一项.
您可以通过添加"(?i)"到正则表达式的开头来执行此操作.
reg, err := regexp.Compile("(?i)"+strings.Replace(s.Name, " ", "[ \\._-]", -1))
Run Code Online (Sandbox Code Playgroud)
对于固定的正则表达式,它看起来像这样.
r := regexp.MustCompile(`(?i)CaSe`)
Run Code Online (Sandbox Code Playgroud)
有关标志的更多信息,请在语法文档中搜索术语"标志".
使用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
Run Code Online (Sandbox Code Playgroud)
标志语法是xyz(set)或-xyz(clear)或xy-z(设置xy,clear 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62460 次 |
| 最近记录: |