programing

Go의 "알 수없는 이스케이프 시퀀스"오류

goodcopy 2021. 1. 19. 08:03
반응형

Go의 "알 수없는 이스케이프 시퀀스"오류


Go로 작성된 다음 기능이 있습니다. 아이디어는 함수에 문자열이 전달되고 발견 된 첫 번째 IPv4 IP 주소를 반환한다는 것입니다. IP 주소가 없으면 빈 문자열이 반환됩니다.

func parseIp(checkIpBody string) string {
    reg, err := regexp.Compile("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
    if err == nil {
        return ""
    }   
    return reg.FindString(checkIpBody)
}

내가 얻는 컴파일 타임 오류는

알 수없는 이스케이프 시퀀스 :.

'.'내가 찾고있는 실제 캐릭터가 Go에게 어떻게 알릴 수 있습니까? 나는 그것을 피하는 것이 속임수를 쓸 것이라고 생각했지만 분명히 내가 틀렸다.


\백 슬래시는 정규식 파서에 의해 해석되지 않는, 그것은 문자열 리터럴로 해석되고있다. 백 슬래시를 다시 이스케이프해야합니다.

regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")

와 인용 문자열 "큰 따옴표 문자는 이동의 "해석 문자열 리터럴"로 알려져있다. 해석 된 문자열 리터럴은 대부분의 언어에서 문자열 리터럴과 같습니다. \백 슬래시 문자는 문자 그대로 포함되지 않고 다음 문자에 특별한 의미를 부여하는 데 사용됩니다. 소스는 \\구문 분석 된 값에서 단일 백 슬래시 문자를 얻으려면 연속으로 두 개의 백 슬래시를 포함해야합니다 .

Go에는 정규 표현식에 대한 문자열 리터럴을 작성할 때 유용한 또 다른 대안이 있습니다. "원시 문자열 리터럴"은 `백틱 문자 로 인용됩니다 . 원시 문자열 리터럴에는 특수 문자가 없으므로 패턴에 백틱이 포함되지 않는 한 아무것도 이스케이프하지 않고이 구문을 사용할 수 있습니다.

regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)

Go 사양의 "문자열 리터럴"섹션에 설명되어 있습니다.


IPv4 주소 (정확한 캡처)

0.0.0.0에서 255.255.255.255까지 일치

이 정규식을 사용하여 IP 번호를 정확하게 일치 시키십시오.

4 개의 번호는 각각 캡처 그룹에 저장되므로 추가 처리를 위해 액세스 할 수 있습니다.

"(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"

참조 URL : https://stackoverflow.com/questions/6770898/unknown-escape-sequence-error-in-go

반응형