[regex] Go에서 대소 문자를 구분하지 않는 정규 표현식을 어떻게 수행합니까?

이제 물론,와 같은 두 경우를 모두 처리하는 정규식을 작성할 수 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)패턴의 시작 부분에를 추가하여 대소 문자를 구분하지 않을 수 있습니다 .

참고


답변

저는 Go에 익숙하지 않지만 다음 예제에 따르면 http://play.golang.org/p/WgpNhwWWuW

정규식 문 앞에 (?i)


답변

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)


답변