상단

RegExp (정규표현식)을 정리 합니다.

 

RegExp 개요


  • 정규표현식(Regular Expression, RegExp)

    • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어

     
  • 정규표현식 스타일

    • POSIX (Portable Operating System Interface) : Unix 기반 정규표현식

    • PCRE (Perl Compatible Regular Expression) : Perl 호환 정규표현식

 
 

[500px](파일:RegExp Process.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 
프로그램_언어

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :