- RegExp 개요
- 정규표현식 사용
- JavaScript
- Java
- Python
- 참고 문헌
RegExp (정규표현식)을 정리 합니다.
RegExp 개요
정규표현식(Regular Expression, RegExp)
특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
정규표현식 스타일
POSIX (Portable Operating System Interface) : Unix 기반 정규표현식
PCRE (Perl Compatible Regular Expression) : Perl 호환 정규표현식
[500px](파일:RegExp Process.png.md)
정규표현식 테스트용 웹사이트
정규표현식 Cheatsheets
[700px](파일:RegExp Cheatsheets.png.md)
정규표현식 사용
JavaScript
RegExp 변수 생성
i flag : Ignore case, 대소문자 구별을 하지 않음
g flag : Global, 문자열 내의 모든 패턴을 검색
m flag : Multi line, 줄이 바뀌어도 검색
역참조 : $1, $2, $3, … 사용
var regExp = null;
regExp = new RegExp('정규표현식', flag); //--- RegExp 객체로 생성
regExp = /정규표현식/flag; //--- 객체 초기화 방식으로 생성
regExp.test('문자열'); //--- true. 문자열에서 regExp 패턴이 탐지됨
'문자열'.match(regExp); //--- null. 탐지 안됨, 탐지된 문자열의 배열
regExp.exec('문자열'); //--- '문자열'.match(regExp)와 유사한 결과
'문자열'.search(regExp); //--- -1. 탐지 안됨, n. 탐지된 위치 (0, 1, 2, …)
'문자열'.replace(regExp, '~'); //--- 탐지한 값을 '~'로 치환
replace(regExp, xxx)
xxx 부분에 $1, $2 등을 사용할 수 있음
xxx 부분에 함수를 사용할 수 있음
'문자열'.replace(regExp, function(str) {
return str + '!';
});
RegExp 사용 사례
/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣](ㄱ-ㅎ|ㅏ-ㅣ|가-힣.md)/ //--- 한글 포함 여부 탐지
/\d{3}-?\d{3}/ //--- 우편번호
/\(?(\d{2,3})\)?[ -.](\d{3,4})[-.]()(\d{4})/ //--- 전화번호
/[-\w.]+@([ A-z0-9][ -A-z0-9]+\.)+[A-z](){2,4}/ //--- 이메일 주소
/(\d[4])[-/\ .] ([01]?\d)[-\/ .] ([0123]()?\d)/ //--- 날짜
/((\bhttps?:\/\/) | (\bwww\.))\S*/ //--- 웹 주소
/^((https?:\/\/) | (www\.))\S*$/ //--- 웹 주소 상세
Java
RegExp 변수 생성
Pattern.COMMENTS flag : 공백 무시, #뒤에 주석 사용
Pattern.CASE_INSENSITIVE flag : 대소문자 구별을 하지 않음
Pattern.UNICODE_CASE flag : 유니코드 캐릭처 속성에 종속 (\w, \b, \s 등)
Pattern.DOTALL flag : 마침표는 개행 문자와 일치 (. 사용시 줄 바뀜 허용)
Pattern.MULTILINE flag : 줄이 바뀌어도 검색
import java.util.regex.*;
Pattern regExp = null;
Matcher matcher = null;
try {
regExp = Pattern.compile("정규표현식", flag); //--- flag는 |로 연결
matcher = regExp.matcher("문자열"); //--- matcher.reset("새 문자열");
while (matcher.find()) {
matcher.group(); //--- 일치하는 문자열 반환
}
} catch (PatternSyntaxException ex) { //--- 정규식 문법 오류
} catch (IllegalArgumentException ex) { //--- 치환 텍스트 문법 오류
} catch (IndexOutOfBoundsException ex) { //--- 존재하지 않는 캡처 그룹 참조
}
Matcher 함수
[700px](파일:RegExp Java Matcher.png.md)
Python
RegExp 변수 생성
역참조 : \1, \2, \3, … 사용
import re
#-*- coding:UTF-8 -*-
matchObject = re.match(r'정규표현식', '문자열', flag = 0); //--- 패턴이 전체 문자열과 일치
matchObject = re.search(r'정규표현식', '문자열', flag = 0); //--- 일치하는 첫번째 검색
list = re.findall(r'정규표현식', '문자열', flag = 0); //--- 일치하는 것의 list 반환
#--- [( #--- , ($1, $2, $3), ($1, $2, $3) , ), ( #--- , ($1, $2, $3), ($1, $2, $3) , ) ]()
list = re.split(r'정규표현식', '문자열', maxsplit = 0, flag = 0); //--- 패턴으로 문자열 분리
resultString = re.sub(r'정규표현식', r'교체_문자열', '문자열', count = 0, flag = 0); //--- 치환
#--- count : 0. 전체 매핑 문자열 치환, n. 해당 개수만큼 치환
def repl(m):
return m.group(1) + m.group(3)
re.sub(r'정규표현식', repl, '문자열'); //--- 함수를 사용하여 치환
regExp = re.compile(r'정규표현식', flag = 0); //--- 정규표현식 재사용
m = regExp.search('문자열', flag = 0);
Match Object
[700px](파일:RegExp Python Match Object.png.md)RegExp용 flag (|로 연결)
re.VERBOSE, re.X : 공백 무시 , #뒤에 주석 사용
re.IGNORECASE, re.I : 대소문자 구별을 하지 않음
re.UNICODE, re.U : 유니코드 캐릭처 속성에 종속 (\w, \b, \s 등)
re.LOCALE, re.L : 현재 로케일에 정속적인 처리 (\w, \b, \s 등)
re.DOTALL, re.S : 마침표는 개행 문자와 일치 (. 사용시 줄 바뀜 허용)
re.MULTILINE, re.M : 줄이 바뀌어도 검색
re.DEBUG : 디버깅 정보 표시
Raw string literal
문자열에서 특수 문자를 표현하기 위해서 사용하는 escape sequence를 사용하지 않을 수 있도록 해주는 표현 방식
//--- 기존 방식으로 문자열 표현
str = 'Hello\nworld!\n'
//--- Raw string literal 방식으로 문자열 표현
str = r'Hello
world!
'
Unicode literal : u'유니코드_문자열"
re.match(ur'정규표현식', u'문자열", re.UNICODE)
참고 문헌
분류: Search
JavaScript
Java
프로그램_언어