저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
정규표현식 사용하기
이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07
문자열 검색하기
다음은 regexp 패키지에서 제공하는 정규표현식 문자열 검색 함수입니다.
- func (re *Regexp) FindString(s string) string: 정규표현식으로 문자열을 검색한 뒤 찾은 문자열을 리턴
- func (re *Regexp) FindStringSubmatch(s string) []string: 정규표현식으로 문자열을 검색한 뒤 찾은 문자열과 괄호로 구분된 하위 항목을 리턴
- func (re *Regexp) FindStringSubmatchIndex(s string) []int: 정규표현식으로 문자열을 검색한 뒤 찾은 문자열의 위치와 괄호로 구분한 하위 항목의 위치를 리턴
- func (re *Regexp) FindAllString(s string, n int) []string: 정규표현식에 해당하는 모든 문자열을 리턴
- func (re *Regexp) FindAllStringIndex(s string, n int) [][]int: 정규표현식에 해당하는 모든 문자열의 위치를 리턴
이번에는 정규표현식을 사용하여 문자열을 검색해보겠습니다.
package main
import (
"fmt"
"regexp"
)
func main() {
re1, _ := regexp.Compile("\\.[a-zA-Z]+$")
s1 := re1.FindString("hello example.com") // 정규표현식으로 문자열 검색
fmt.Println(s1) // .com: 맨 마지막에 오는 ".영문"이므로 .com
re2, _ := regexp.Compile("([a-zA-Z]+)(\\.[a-zA-Z]+)$")
s2 := re2.FindStringSubmatch("hello example.com") // 문자열을 검색한 뒤 찾은 문자열과
// 괄호로 구분된 하위 항목 리턴
fmt.Println(s2) // [example.com example .com]: 맨 마지막에 오는 "영문.영문"을 찾고
// 하위 항목 example과 .com을 리턴
n2 := re2.FindStringSubmatchIndex("example.com") // 문자열을 검색한 뒤 찾은 문자열의
// 위치와 괄호로 구분한 하위 항목의 위치를 리턴
fmt.Println(n2) // [0 11 0 7 7 11]
re3, _ := regexp.Compile("\\.[a-zA-Z.]+")
s3 := re3.FindAllString("hello.co.kr world hello.net example.com", -1)
// 정규표현식에 해당하는 모든 문자열 검색
fmt.Println(s3) // [.co.kr .net .com]: ".영문."에 해당하는 모든 문자열(-1)
s3 = re3.FindAllString("hello.co.kr world hello.net example.com", 2)
// 정규표현식에 해당하는 모든 문자열 검색
fmt.Println(s3) // [.co.kr .net]: ".영문."에 해당하는 문자열 2개 리턴
n3 := re3.FindAllStringIndex("hello.co.kr world hello.net example.com", -1)
// 정규표현식에 해당하는 모든 문자열의 위치를 리턴
fmt.Println(n3) // [[5 11] [23 27] [35 39]]: ".영문."에 해당하는 모든 문자열의 위치
}
실행 결과
.com
[example.com example .com]
[0 11 0 7 7 11]
[.co.kr .net .com]
[.co.kr .net]
[[5 11] [23 27] [35 39]]
다음 함수들은 regexp.Compile 함수에 정규표현식을 설정하여 사용합니다.
- FindString 함수는 정규표현식으로 문자열을 검색한 뒤 찾은 문자열을 리턴합니다.
- FindStringSubmatch 함수는 정규표현식으로 문자열을 검색한 뒤 찾은 문자열과
( )
(괄호)로 구분한 하위 항목도 함께 리턴합니다. 예제와 같이 hello example.com 문자열에서 ([a-zA-Z]+)(\\.[a-zA-Z]+)$처럼 검색하면 찾은 문자열 example.com과 ([a-zA-Z]+)에 해당하는 example 그리고 (\\.[a-zA-Z]+)$에 해당하는 .com을 함께 리턴합니다. - FindStringSubmatchIndex 함수는 정규표현식으로 문자열을 검색한 뒤 찾은 문자열의 위치와 괄호로 구분한 하위 항목의 위치를 함께 리턴합니다. 예제의 출력 결과 [0 11 0 7 7 11]과 같이 시작, 끝, 시작, 끝... 형태입니다.
- FindAllString 함수는 문자열에서 정규표현식에 해당하는 모든 문자열을 리턴합니다. 두 번째 매개변수는 찾을 개수이며 앞쪽부터 찾습니다. -1을 설정하면 발견되는 모든 문자열을 리턴하고 2를 설정하면 두 개만 리턴합니다.
- FindAllStringIndex 함수는 문자열에서 정규표현식에 해당하는 모든 문자열의 위치를 리턴합니다. 두 번째 매개변수는 찾을 개수이며 앞쪽부터 찾습니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.