RegExp
둘러보기로 가기
검색하러 가기
RegExp (정규표현식)을 정리 합니다.
RegExp 개요
- 정규표현식(Regular Expression, RegExp)
- 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
- 정규표현식 스타일
- POSIX (Portable Operating System Interface) : Unix 기반 정규표현식
- PCRE (Perl Compatible Regular Expression) : Perl 호환 정규표현식
- 정규표현식 테스트용 웹사이트
- 정규표현식 Cheatsheets
정규표현식 사용
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 사용 사례
/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/ //--- 한글 포함 여부 탐지 /\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 함수
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) ] 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
- 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)