초성 검색 정규식 만들기 — ㄱㅅ을 [가-깋][사-싷]로
초성 검색어를 음절 범위 정규식으로 바꾸고 바로 테스트
브라우저에서 처리 · 서버로 전송되지 않음
정규식 패턴
[가-깋][사-싷]JavaScript 리터럴
/[가-깋][사-싷]/gu\u 이스케이프 패턴
[\uAC00-\uAE4B][\uC0AC-\uC2F7]한글을 직접 쓸 수 없는 환경용이에요. ASCII 밖의 문자를 \uXXXX로 바꿨어요.
일치 4개
일치한 부분
일치한 문자열
- 감사 × 1
- 기상 × 1
- 고속 × 1
- 검색 × 1
쌍자음 초성은 ㄲ ㄸ ㅃ ㅆ ㅉ 한 글자로 입력하세요. ㄱㄱ처럼 두 번 치면 초성이 ㄱ인 글자 두 개를 찾아요. 정규식은 u 플래그로 실행해요.
소개
초성 검색 정규식 생성기는 ’ㄱㅅ’처럼 초성으로 된 검색어를 ‘[가-깋][사-싷]’ 같은 정규식으로 바꿔 주는 도구예요. 연락처나 상품 목록에서 초성만 쳐도 결과가 나오게 하는 초성 검색을 직접 구현할 때, 매번 범위를 계산하지 않고 바로 복사해서 쓸 수 있어요. 만든 정규식은 아래 테스트 영역에서 곧바로 실행돼서 어떤 단어가 걸리고 어떤 단어가 빠지는지 강조 표시와 일치 개수로 확인할 수 있어요. 결과는 정규식 패턴, JavaScript 리터럴, 한글을 \uXXXX로 바꾼 이스케이프 패턴 세 가지로 나와요. 모든 처리는 브라우저 안에서 이루어지고 입력한 글은 어디에도 보내지 않아요.
사용법
- 초성 검색어 칸에 ㄱㅅ처럼 초성을 입력해요. 감ㅅ처럼 완성된 글자와 초성을 섞어도 돼요.
- 필요하면 옵션을 켜요. 초성 낱자도 맞추기, 받침 없는 글자 확장, 글자 사이 공백 허용 중에서 고를 수 있어요.
- 만들어진 정규식 패턴과 JavaScript 리터럴, \u 이스케이프 패턴 중에서 쓰려는 형식의 복사 버튼을 눌러요.
- 테스트할 글 칸에 실제 데이터와 비슷한 글을 넣고, 강조 표시와 일치 개수, 일치한 문자열 목록을 확인해요.
기준
- 초성 범위: 유니코드 표준 3.12절의 한글 음절 배열에 따라 초성 번호 i(ㄱ=0 … ㅎ=18)는 시작 = 0xAC00 + i×588, 끝 = 시작 + 587인 범위가 돼요. 그래서 ㄱ은 [가-깋], ㄲ은 [까-낗], ㅅ은 [사-싷], ㅎ은 [하-힣]이에요. 초성으로 쓸 수 있는 자음은 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ 19개이고, ㄳ 같은 겹받침 자모는 일반 문자로 그대로 맞춰요.
- 두 낱자: ㄱㄱ은 ㄲ이 아니라 초성이 ㄱ인 글자 두 개로 처리해요.
- 초성 낱자도 맞추기: 범위 안에 초성 자모 자체를 더해 [가-깋ㄱ]처럼 만들어요. 데이터에 ‘ㅋㅋ’ 같은 자모가 섞여 있을 때 유용해요.
- 완성 음절: 검색어에 쓴 완성 음절은 그 글자 그대로 맞춰요. ’받침 없는 글자는 받침 있는 글자까지 포함’을 켜면 받침이 없는 음절은 그 음절부터 27자 뒤까지의 범위가 되어 ’가’가 [가-갛]이 되고 감, 각, 강도 함께 걸려요. 받침이 있는 음절은 그대로 둬요.
- 공백: 기본은 검색어의 공백을 그대로 맞춰요. ’글자 사이 공백 허용’을 켜면 검색어의 공백은 지우고 글자 사이마다 \s*를 넣어요.
- 이스케이프: 마침표, 괄호, 대괄호, 중괄호, 별표, 더하기, 물음표, 캐럿, 달러, 세로줄, 역슬래시, 슬래시는 앞에 역슬래시를 붙여요. 한자와 이모지는 한 글자 그대로 맞춰요.
- 완성형(NFC)만 맞춰요: 만든 패턴은 완성형 음절 범위라서, macOS 파일 이름처럼 초성·중성·종성으로 풀린 첫가끝(NFD) 글자에는 걸리지 않아요. 테스트 영역은 붙여 넣은 글을 NFC로 합친 뒤 검사하지만, 실제 코드에서는 검사할 문자열에 normalize(‘NFC’)를 먼저 적용하세요.
- 실행: 테스트 영역은 ‘gu’ 플래그로 실행해요. \u 이스케이프 패턴은 ASCII 밖의 문자를 UTF-16 코드 단위로 바꾼 것이라 원래 패턴과 같은 결과가 나와요.
- 검색어는 100글자, 테스트할 글은 20,000자까지 넣을 수 있고, 일치는 앞쪽 5,000개까지 찾아요.
예시
| 검색어 | 옵션 | 정규식 | 걸리는 예 | 안 걸리는 예 |
|---|---|---|---|---|
| ㄱㅅ | 기본 | [가-깋][사-싷] | 감사, 기상, 고속 | 사과 |
| ㅎㄱ | 기본 | [하-힣][가-깋] | 한국, 학교 | 하까 |
| 감ㅅ | 기본 | 감[사-싷] | 감사, 감성 | 강사 |
| ㄱㅅ | 초성 낱자 | [가-깋ㄱ][사-싷ㅅ] | 감사, ㄱㅅ | 사과 |
| 가ㅅ | 받침 확장 | [가-갛][사-싷] | 가수, 각서, 감사 | 거사 |
| ㄱ ㅅ | 공백 허용 | [가-깋]\s*[사-싷] | 감사, 감 사 | 사 감 |
참고할 점
정규식 초성 검색은 목록이 수천 개 정도일 때 간단하고 빠르게 쓸 수 있어요. 데이터가 아주 많다면 초성만 따로 뽑아 저장해 두고 그 문자열에서 찾는 방식이 더 효율적일 수 있어요. 데이터베이스마다 정규식 문법과 유니코드 지원 정도가 다르니, 실제 환경에서 한 번 실행해 보고 쓰세요.
자주 묻는 질문
ㄱ이 왜 [가-깋]이 되나요?
유니코드의 한글 음절은 초성 순서대로 588자씩 묶여 있어요. 초성이 ㄱ인 글자는 가(U+AC00)부터 깋(U+AE4B)까지 이어져 있어서 이 범위 하나로 '초성이 ㄱ인 모든 글자'를 표현할 수 있어요.
ㄲ을 찾으려면 어떻게 입력해야 하나요?
자판에서 Shift를 누르고 친 ㄲ 한 글자로 입력하세요. ㄱㄱ처럼 두 번 치면 초성이 ㄱ인 글자 두 개를 찾는 [가-깋][가-깋]가 돼요.
다른 프로그래밍 언어에서도 쓸 수 있나요?
문자 클래스와 범위는 대부분의 정규식 엔진이 지원해요. 소스 파일에 한글을 직접 쓰기 어렵다면 \u 이스케이프 패턴을 쓰세요. JavaScript, Java, Python의 re 모듈은 \uXXXX를 알아듣지만, 엔진마다 문법이 조금씩 달라서 PCRE처럼 \x{AC00} 형식을 쓰는 곳도 있어요.
띄어쓰기가 있는 단어도 찾을 수 있나요?
옵션에서 '글자 사이 공백 허용'을 켜면 검색어의 공백은 무시하고 글자 사이마다 \s*를 넣어서 '감사'와 '감 사'를 모두 찾아요. 끄면 검색어에 쓴 공백을 그대로 맞춰요.
테스트 영역에 넣은 글은 저장되나요?
아니요. 정규식 생성과 일치 검사는 모두 브라우저 안에서 이루어지고, 입력한 글은 저장하거나 보내지 않아요.