소개
이 랩은 Golang 에서 정규 표현식 (regular expressions) 을 사용하는 방법을 보여줍니다.
이 랩은 Golang 에서 정규 표현식 (regular expressions) 을 사용하는 방법을 보여줍니다.
이 랩에서는 Golang 에서 다양한 정규 표현식 관련 작업을 수행하기 위한 코드를 완성해야 합니다.
regexp 패키지를 사용하여 정규 표현식 관련 작업을 수행합니다.MatchString을 사용하여 패턴이 문자열과 일치하는지 테스트합니다.Compile을 사용하여 Regexp 구조체를 최적화합니다.MatchString을 사용하여 Compile과 유사하게 일치 여부를 테스트합니다.FindString을 사용하여 정규 표현식에 대한 일치를 찾습니다.FindStringIndex를 사용하여 첫 번째 일치를 찾고 일치하는 텍스트 대신 일치의 시작 및 끝 인덱스를 반환합니다.FindStringSubmatch를 사용하여 p([a-z]+)ch와 ([a-z]+) 모두에 대한 정보를 반환합니다.FindStringSubmatchIndex를 사용하여 일치 및 하위 일치의 인덱스에 대한 정보를 반환합니다.FindAllString을 사용하여 정규 표현식에 대한 모든 일치를 찾습니다.FindAllStringSubmatchIndex를 사용하여 첫 번째 일치뿐만 아니라 입력의 모든 일치에 적용합니다.Match를 사용하여 []byte 인수를 사용하여 일치 여부를 테스트하고 함수 이름에서 String을 제거합니다.MustCompile을 사용하여 정규 표현식으로 전역 변수를 생성합니다.ReplaceAllString을 사용하여 문자열의 하위 집합을 다른 값으로 바꿉니다.ReplaceAllFunc를 사용하여 주어진 함수로 일치하는 텍스트를 변환합니다.## Go 정규 표현식에 대한 전체 참조는
## [`regexp`](https://pkg.go.dev/regexp) 패키지 문서를 확인하십시오.
전체 코드는 다음과 같습니다.
// Go 는 [정규 표현식](https://en.wikipedia.org/wiki/Regular_expression) 에 대한 내장 지원을 제공합니다.
// 다음은 Go 에서 일반적인 regexp 관련 작업의 몇 가지 예입니다.
package main
import (
"bytes"
"fmt"
"regexp"
)
func main() {
// 이것은 패턴이 문자열과 일치하는지 테스트합니다.
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match)
// 위에서는 문자열 패턴을 직접 사용했지만,
// 다른 regexp 작업의 경우 `Regexp` 구조체를 `Compile` 해야 합니다.
r, _ := regexp.Compile("p([a-z]+)ch")
// 이러한 구조체에서 많은 메서드를 사용할 수 있습니다. 다음은
// 앞에서 본 것과 같은 일치 테스트입니다.
fmt.Println(r.MatchString("peach"))
// 이것은 정규 표현식에 대한 일치를 찾습니다.
fmt.Println(r.FindString("peach punch"))
// 이것은 또한 첫 번째 일치를 찾지만
// 일치하는 텍스트 대신 일치의 시작 및 끝 인덱스를 반환합니다.
fmt.Println("idx:", r.FindStringIndex("peach punch"))
// `Submatch` 변형은 전체 패턴 일치와
// 해당 일치 내의 하위 일치에 대한 정보를 포함합니다. 예를 들어, 이것은
// `p([a-z]+)ch` 와 `([a-z]+)` 모두에 대한 정보를 반환합니다.
fmt.Println(r.FindStringSubmatch("peach punch"))
// 마찬가지로 이것은 일치 및 하위 일치의
// 인덱스에 대한 정보를 반환합니다.
fmt.Println(r.FindStringSubmatchIndex("peach punch"))
// 이러한 함수의 `All` 변형은
// 첫 번째 일치뿐만 아니라 입력의 모든 일치에 적용됩니다. 예를 들어,
// 정규 표현식에 대한 모든 일치를 찾습니다.
fmt.Println(r.FindAllString("peach punch pinch", -1))
// 이러한 `All` 변형은
// 위에서 본 다른 함수에서도 사용할 수 있습니다.
fmt.Println("all:", r.FindAllStringSubmatchIndex(
"peach punch pinch", -1))
// 이러한 함수에 두 번째 인수로
// 음수가 아닌 정수를 제공하면 일치하는 횟수를 제한합니다.
fmt.Println(r.FindAllString("peach punch pinch", 2))
// 위의 예에서는 문자열 인수를 사용했고
// `MatchString` 과 같은 이름을 사용했습니다. 또한
// `[]byte` 인수를 제공하고 함수 이름에서 `String` 을 삭제할 수 있습니다.
fmt.Println(r.Match([]byte("peach")))
// 정규 표현식으로 전역 변수를 만들 때
// `Compile` 의 `MustCompile` 변형을 사용할 수 있습니다.
// `MustCompile` 은 오류를 반환하는 대신 패닉을 발생시키므로
// 전역 변수에 사용하는 것이 더 안전합니다.
r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println("regexp:", r)
// `regexp` 패키지는 또한
// 문자열의 하위 집합을 다른 값으로 바꾸는 데 사용할 수 있습니다.
fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
// `Func` 변형을 사용하면 주어진 함수로
// 일치하는 텍스트를 변환할 수 있습니다.
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out))
}
이 랩은 Golang 에서 정규 표현식을 사용하여 패턴이 문자열과 일치하는지 테스트하고, 정규 표현식에 대한 일치를 찾고, 문자열의 하위 집합을 다른 값으로 바꾸는 등 다양한 작업을 수행하는 방법을 보여줍니다.