가장 빨리 만나는 Go 언어 Unit 48.2 문자열 검색하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

정규표현식 사용하기

이재홍 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 공유는 허용합니다.

Published

2015-06-01