>  기사  >  백엔드 개발  >  Go Regexp의 \".\"가 개행 문자와 일치합니까? 문자 일치의 예기치 않은 동작.

Go Regexp의 \".\"가 개행 문자와 일치합니까? 문자 일치의 예기치 않은 동작.

DDD
DDD원래의
2024-10-28 11:03:01540검색

 Does Go Regexp's

Go Regexp: 모든 문자 일치 이해

Go re2 구문 문서에서는 모든 문자(.)가 개행을 포함한 모든 문자와 일치한다고 명시합니다. "s" 플래그가 설정된 경우. 그러나 최근 질의에 따르면 테스트 프로그램에서는 그렇지 않은 것으로 나타났다.

예상치 못한 프로그램 결과

제공된 프로그램(http://play.golang.org) /p/pccP52RvKS)는 줄바꿈을 포함한 모든 문자를 일치시키는 것을 목표로 하지만 결과는 모든 문자가 줄바꿈과 일치하지 않음을 나타냅니다.

불일치 해결

다른 많은 문자와 마찬가지로 정규식 엔진에서 Go의 re2는 개행 문자를 "."와 일치하지 않습니다. 기본적으로 메타 문자입니다. 개행 일치를 활성화하려면 "?s"(모두 점) 플래그를 정규식에 추가해야 합니다.

"?s" 플래그가 있는 예

수정된 버전 "?s" 플래그를 포함하는 테스트 프로그램:

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?s).+")
    match := re.FindString("abc\ndef")
    fmt.Println(match)
}</code>

이 프로그램이 실행되면 "abcndef"가 올바르게 인쇄되어 이제 모든 문자가 예상대로 줄바꿈과 일치함을 보여줍니다.

결론

Go의 re2 구문에서 "." 메타 문자는 본질적으로 개행 문자와 일치하지 않습니다. 개행 일치를 활성화하려면 "?s" 플래그를 정규식에 추가해야 합니다. 이 플래그를 통합함으로써 사용자는 re2 구문 문서에 맞춰 정확한 일치 동작을 보장할 수 있습니다.

위 내용은 Go Regexp의 \".\"가 개행 문자와 일치합니까? 문자 일치의 예기치 않은 동작.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.