달력

12

« 2019/12 »

  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  


 

정규 표현식(정규식;Regular Expressions)

·       정규식(正規式) Regex regexp

·       1960년대에 전산 이론에서 컴퓨터가 이해할 있는 언어를 고안하면서 나온 오래된 언어입니다.

·       문자열을 처리하는 모든 곳에서 사용되어 지며 복잡한 문자열을 처리할 사용하는 기법입니다.

·       언어을 표현 있는 문자식입니다.

·       특정한 규칙을 가진 문자열의 패턴(pattern) 표현하는 사용하는 표현식(Expression)으로 텍스트에서 특정 글자나 단어, 문자열에서 특정 패턴을 검색하거나 치환 사용합니다.

·       정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있는 와일드 카드 표현식입니다.

·       특히 (Perl) Tcl 언어 자체에 강력한 정규 표현식을 구현하고 있습니다.

·       정규 표현식은 문자열을 토큰으로 변환하는 과정에서 텍스트를 좌에서 우로 검사하면서 여러 규칙과 일치될 문자의 수량을 다양하게 시도하는 처리하는데 가장 적합합니다. 또한, 파싱에도 사용됩니다.

·       특정 문자나 문자열로 문자열을 다루는 것에 문자뿐 만이 아니고 특수 문자로 다룰 있고 이들을 조합하여 다룰 있는 조건식(pattern) 제공하여 세밀한 방법으로 문자들을 검색할 있게 합니다.

·       정규식 처리기가 해석할 있도록 정해진 문법에 따라 사용하여야 합니다

 

 

 

https://en.wikipedia.org/wiki/Regular_expression

 



유래

정규표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 넓은 언어를 표현할 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있습니다. 표준화된 것으로는 POSIX 확장 정규 표현식 있으며, 표준화되지는 않았지만 펄의 정규 표현식과 대체 구현인 PCRE 널리 사용됩니다.

 

 

 

정규화

데이터를 일정한 규칙에 따라 변형하여 이용하기 쉽게 만드는 것을 의미합니다.

 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Dot(.)

·       정규 표현식의 Dot(.) 메타 문자

·       줄바꿈 문자인 \n 제외한 모든 문자 의미합니다.

·       . \n 제외한 모든 문자와 매치되는데 심지어 \n문자와도 매치되게 하려면 정규식 작성시 옵션으로 re.DOTALL 이라는 옵션을 주면 \n문자와도 매치되게 있습니다.

 

 

 

 

a.b

"a + 모든문자 + b" 동일한 의미로 a b라는 문자 사이에 어떤 문자가 들어갈 있다는 의미입니다.

 

"aab"

가운데 문자 "a" 모든 문자를 의미하는 . 일치하므로 정규식과 매치된다.

"a0b"

가운데 문자 "0" 모든 문자를 의미하는 . 일치하므로 정규식과 매치된다.

"abc"

"a"문자와 "b"문자 사이에 어떤 문자라도 하나는 있어야 하는 정규식과 일치하지 않으므로 매치되지 않는다.

 

 

 

 

a[.]b

"a + Dot(.)문자 + b" 동일한 의미

 

"aab"

일치하지 않습니다.

"a0b"

일치하지 않습니다.

"abc"

일치하지 않습니다.

"a.b"

가운데 문자가 .이므로 정규식과 일치합니다.

 

 

Posted by codedragon codedragon

댓글을 달아 주세요


 

정규표현식의 메타 문자 종류

메타문자

의미

.

·       임의의 문자

·       뉴라인(\n) 제외한 모든 문자를 의미

 

·       .{3} : 문자 3 (F15, 0x0 )

^

·       머리(문자열의 처음, 라인의 처음을 의미)

·       패턴의 시작, 문자만 패턴의 앞에 있습니다.

·       문자 클래스 내에 ^ 메타 문자가 사용될 경우에는 반대(not)라는 의미를 가집니다.

·       re.MULTILINE 사용할 경우에는 여러줄의 문자열에서는 라인의 처음과 일치해야 합니다.

 

·       ^abc : abc 시작해야 (abcd, abc12 )

$

·       꼬리(문자열의 마지막, 라인의 끝을 의미)

·       문자는 태펀의 끝을 알림, 문자열에서 패턴의 마지막 문자는 반드시 문자로 끝나야 합니다.

·       ^ 메타문자의 반대

 

·       python$이라면 문자열의 마지막은 항상 python으로 끝나야 합니다.

·       xyz$ : xyz 종료되어야 (123xyz, strxyz )

\s

·       공백 문자

·       공백문자는 공백, , 줄바꿈, 리턴키 포함

·       화이트 스페이스를 의미

·       [ \t\n\r\f\v] 동일한 표현식( 앞의 칸은 공백문자)

 

·       \s\s : 화이트 스페이스 문자 2 의미 (\r\n, \t\t )

\S

·       공백 문자 아님

·       공백이 아닌 문자를 매칭합니다.

·       [^ \t\n\r\f\v] 동일한 표현식

\w

·       문자+숫자(alphanumeric) 매치

·       [a-zA-Z0-9] 동일한 표현식

 

·       \w\w\w : 문자가 3개를 의미 (xyz, ABC )

\W

·       문자+숫자(alphanumeric) 아닌 문자와 매치

·       [^a-zA-Z0-9] 동일한 표현식

\d

·       숫자 0 ~ 9

·       [0-9] 동일한 표현식

 

·       \d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 )

\D

·       숫자 이외의 문자

·       [^0-9] 동일한 표현식

\A

·       문자열의 처음과 매치됨을 의미

·       ^ 동일한 의미이지만 re.MULTILINE 옵션을 사용할 경우에는 다르게 해석된다. re.MULTILINE 옵션을 사용할 경우 ^ 라인별 문자열의 처음과 매치되지만 \A 라인과 상관없이 전체 문자열의 처음하고만 매치됩니다.

\Z

·       문자열의 끝과 매치됨을 의미

·       re.MULTILINE 옵션을 사용할 경우 $ 메타문자와는 달리 전체 문자열의 끝과 매치됩니다.

\b

·       단어 경계, 단어 구분자(Word boundary)

·       보통 단어는 whitespace 의해 구분 되어 집니다.

·       \b 파이썬 리터럴로 백스페이스(Back Space) 의미하므로 백스페이스가 아닌 단어구분자(Word Boundary)임을 알려주기 위해 r'\bclass\b' 처럼 raw string임을 알려주는 기호 r 반드시 붙여주어야 합니다.

\B

·       비단어 경계

·       \b 메타문자의 반대

·       whitespace 구분된 단어가 아닌 경우에만 매치되어 집니다.

X?

·       X 0문자 또는 1문자

·       패턴이 없거나 하나이어야 (Optional 패턴을 정의할 사용)

 

·       \d? : 숫자가 하나 있거나 없어야 합니다.

X*

·       패턴이 0 이상이어야 합니다.

·       X 0문자 이상 반복

 

·       \d* : 숫자가 없거나 하나 이상이어야 합니다.

X+

·       패턴이 하나 이상이어야 합니다.

·       X 1문자 이상 반복

 

·       \d+ : 숫자가 하나 이상이어야 합니다.

X{n}

·       패턴이 n 반복해서 나타나는 경우

·       X n 반복

 

·       \d{3} : 숫자가 3 있어야 합니다.

X{n,}

·       X n 이상 반복

X{n,m}

·       패턴이 최소 n, 최대 m 반복해서 나타나는 경우 (n 또는 m 생략 가능)

·       X n부터 m 반복

 

·       \d{3,5} : 숫자가 3, 4 혹은 5 있어야 합니다.

X|Y

·       패턴 하나이어야 합니다.

·       "or" 의미

·       X 또는 Y

[XYZ]

·       정의된 문자들의 집합중에 매칭되는 단어가 있어야 합니다.

·       [XYZ] : X또는 Y 또는 Z 1문자

·        

·       [Pp]ython : "Python" 혹은 "python"

[^XYZ]

·       [문자들] 반대로 피해야할 문자들의 집합을 정의합니다.

·       X Y Z 아닌 1문자

 

·       [^aeiou] : 소문자 모음이 아닌 문자들

()

소괄호로 추출 시작점과 끝점을 지정해줍니다.

 

\S+@\S+ : '@' 문자 뒤로 공백이 아닌 문자(\S) 오는 문자열 패턴

 

 

Posted by codedragon codedragon

댓글을 달아 주세요


 

 

regular expressions 101

·         php, javascript, python, golang형식의 정규표현식을 만들어주는 사이트입니다.

·         테스트 문자열을 가지고 표현식을 매칭시켜가면서 정확한 표현식을 만들 있습니다.

 

https://regex101.com/


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

정규 표현식 특징

·       정규 표현식은 자체로 하나의 언어입니다

·       특수 (marker) 문자로 이루어진 언어로 문자만을 사용해서 프로그래밍합니다.

·       축약된 '형식 언어' 종류입니다.

·       기호로 되어 있어 굉장히 효과적으로 동작합니다.

·       정규 표현식은 복잡하고 배우는데 어려울 있지만 굉장히 효율적이고 활용도가 높습니다.

·       배우면 다양한 언어와 많은 곳에서 활용할 있습니다.

·       정규 표현식에서는 소문자와 대문자를 구분합니다.

 

Posted by codedragon codedragon

댓글을 달아 주세요


 

RegExr

정규표현식 작성에 도움을 받을 있는 사이트입니다.

 

https://regexr.com/


 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

정규 표현식 활용

·       웹페이지에서 전화번호나 이메일 주소를 발췌

·       로그파일에서 특정 에러메시지가 들어간 라인들을 찾을

·       Email Check, File 확장자 Check, 주민등록번호 Check, 문자열 공백제거, 문자열 글자 대문자로 치환 (정규표현식을 이용하여 다양한 형태의 유효성검사 구현)

 

Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Python Regular Expression Quick Guide

https://www.py4e.com/lectures3/Pythonlearn-11-Regex-Handout.txt

 

Python Regular Expression Quick Guide

^        Matches the beginning of a line
$        Matches the end of the line
.        Matches any character
\s       Matches whitespace
\S       Matches any non-whitespace character
*        Repeats a character zero or more times
*?       Repeats a character zero or more times
         (non-greedy)
+        Repeats a character one or more times
+?       Repeats a character one or more times
         (non-greedy)
[aeiou]  Matches a single character in the listed set
[^XYZ]   Matches a single character not in the listed set
[a-z0-9] The set of characters can include a range
(        Indicates where string extraction is to start
)        Indicates where string extraction is to end

 

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

 

 

GoF(Gang of Four) 디자인 패턴

프로그램의 설계유형을 다룬 책의 이름

디자인 패턴를 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳

네 명의 컴퓨터 과학 연구자가 23가지 디자인 패턴으로 분류

 

 

GoF의 디자인 패턴 유형

유형

패턴

생성 패턴

5가지 패턴

구조 패턴

7가지 패턴

행동 패턴

11가지 패턴

 

 

GoF의 디자인 패턴 : 재사용성을 지닌 객체지향 소프트웨어의 핵심요소

Design Patterns: Elements of Reusable Object-Oriented Software

http://www.yes24.com/24/goods/17525598?scode=032&OzSrank=1


 

 

Posted by codedragon codedragon

댓글을 달아 주세요