이제 물론,와 같은 두 경우를 모두 처리하는 정규식을 작성할 수 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
패키지 문서 (또는 구문 문서 )에서 “flags”라는 용어를 검색하십시오
.
답변
답변
답변
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 (set) 또는 -xyz (clear) 또는 xy-z (set 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)
답변
