ProgramingTip

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

bestdevel 2020. 11. 3. 08:24
반응형

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`)

플래그 에 대한 자세한 내용은 패키지 문서 (또는 구문 문서 )에서 "flags"라는 용어를 검색하십시오 .regexp/syntax


(?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)

참고 URL : https://stackoverflow.com/questions/15326421/how-do-i-do-a-case-insensitive-regular-expression-in-go

반응형