본문 바로가기
IT

[정규식] 기본적인 정규식 정리

by 엘리후 2021. 6. 28.

리눅스에서도 많이 사용되고, 윈도우에선 노트패드++로 수많은 파일 중에서 원하는 문자열이 들어가 있는 파일을 찾을 때, 소스 코드에서 특정 부분들을 찾을 때 자주 사용되는 정규식의 기본적인 사용 방법을 정리해보겠습니다.

 

\a : 벨 문자 매치 (\u0007)

\b : 백스페이스 문자 매치

\t : 탭 문자 매치

\r : 캐리지 리턴 문자 매치

\v : 세로 탭 문자 매치

\f : 폼 피드 문자 매치

\n : new line 문자 매치 1

\e : 이스케이프 문자 매치

\nnn : 입력된 숫자를 8진수로 해석한 수에 해당하는 문자 매치

\xnn : 입력된 숫자를 16진수로 해석한 수에 해당하는 문자 매치

\cX, \cx : 컨트롤 문자와 함께 눌려진 문자 매치2

\unnnn : 숫자에 해당하는 유니코드 문자 매치

 

[문자 그룹] : 해당하는 문자 그룹 중 하나라도 있으면 매치3

[^문자 그룹] : 문자 그룹에 매치되지 않으면 매치4

[시작 - 종료] : 시작부터 종료까지의 문자 매치5

. : 모든 문자 매치

\w : 모든 word 매치6

\W : 모든 non-word 매치7

\s : 공백 문자 매치

\S : 공백 문자가 아닌 문자 매치

\d : 숫자 매치

\D : 숫자가 아닌 문자 매치

 

^ : 문자열 또는 줄의 시작

$ : 문자열 또는 줄의 끝8

\A : 문자열의 시작에서 가장 많이 나타난 문자 매치9

\Z : 문자열의 끝에서 가장 많이 나타난 문자 매치 (New line 포함)10

\z : 위와 동일. 단, New line 문자 미포함

\G : 특정 지점에서 가장 많이 나타난 문자 매치11

\b : \w 또는 \W 문자 사이에서 가장 많이 나타난 문자 매치

\B : \b의 반대

 

# 그룹

(정규식) : 괄호 안의 문자를 캡쳐.12

(?<name>정규식) : 괄호 안의 문자를 캡쳐하고 이름 지정13

(?:정규식) : 괄호 안의 문자는 캡쳐하지 않음

.(?=정규식) : 문자 후에 정규식이 나올 경우 문자를 매치

.(?!정규식) : 문자 후에 정규식이 나오지 않을 경우 매치. 반대도 가능

.(?<=정규식) : 문자 후에 나오는 정규식만 매치

.(?<!정규식) : 문자 후에 정규식이 나오지 않을 경우 매치. 반대도 가능

.(?>정규식) : 정규식을 백트래킹 하지 않음14

 

* : 앞의 정규식 또는 문자를 0회 이상 반복15

+ : 앞의 정규식 또는 문자를 1회 이상 반복16

? : 앞의 정규식 또는 문자를 0회 또는 1회 매치17

{n} : 이전의 문자를 n회 반복

{n,} : 이전의 문자를 n회 이상 반복

{n, m} : 이전의 문자를 n회 이상, m회 이하 반복

 

| : 괄호 안에서 한 구간이라도 일치하면 매치18

(?(정규식)yes|no) : 정규식이 일치하면 yes 부분 매치, 아니라면 no 부분 매치

(?(<name>yes|no) : 캡쳐된 name과 일치하면 yes, 아니면 no 부분 매치

 

$number : 캡쳐된 엘리먼트19

${name} : 캡쳐된 이름

$$: '$'

$` : 매치되기 전의 모든 문자

$+ : 마지막으로 캡쳐된 그룹

$_ : 모든 입력 문자

 

#그룹 안에서

?i : 대소문자 구분 안 함

?m : 멀티라인 모드

?n : 이름 미지정된 그룹 캡쳐 안 함

?s : 싱글라인 모드

?x : 이스케이프 처리되지 않은 공백 문자는 무시

 

예: "a(?i)abort(?-i)ed" 를 "aAbortED"에 매치시키면 "Abort" 반환

예2: "(?x)a b\sc(?-x) d"를 "ab c d"에 매치시키면 "ab c d" 반환

 

(?#comment) : 인라인 주석

#(줄의 마지막에서) : 주석

  1. 리눅스, 맥 등에서는 일반적으로 새 줄을 매치할 때 n만 쓰면 되나, 윈도우 환경에서 일반적인 텍스트 에디터로 작성된 경우 rn을 사용해야 새 줄이 정상적으로 매치됩니다. [본문으로]
  2. cC : Ctrl + C 매치 [본문으로]
  3. "가나다a라마바b사아자" 에 [abc]를 글로벌 매치시키면 "a", "b", "c"가 반환된다. [본문으로]
  4. "가나다a라마바b사아자c"에서 [^abc]를 글로벌 매치시키면 "가", "나", "다", "라", "마", "바", "사", "아", "자" 반환. [본문으로]
  5. "동해물과 USa"에 [A-Z]를 글로벌 매치시키면 "U", "S" 반환. [본문으로]
  6. 단어를 매치한단 뜻이 아니다. "IDEA 1.7"에서 "I", "D", "E", "A", "1", "7"을 반환한다. [본문으로]
  7. "IDEA 1.7"에서 " ", "." 반환 [본문으로]
  8. n(new line) 문자가 있을 경우 해당 문자 반환. 없을 경우 문자열의 끝 문자 반환. [본문으로]
  9. "ABC-DEF-"에 "A[A-Z]{3}-"을 매치시켰을 때 "ABC-"가 반환됨. [본문으로]
  10. "ABC-DEF-"에서 "[A-Z]{3}-Z"을 매치시켰을 때 "DEF-" 반환 [본문으로]
  11. "(1)(2)(3)[4](5)"에 "[G(D)"를 매치시키면 "(1)", "(2)", "(3)" 반환 [본문으로]
  12. 프로그래밍에선 정규식 클래스의 Captures 멤버 등등에 저장되고, 노트패드++ 등에선 n으로 캡쳐된 문자를 불러올 수 있다. [본문으로]
  13. (정규식) 그룹에서 캡쳐된 문자는 1, 2등 숫자로만 불러올 수 있지만 이 방법으로 캡쳐한 문자는 k으로 불러올 수 있다. [본문으로]
  14. [123](?>A+B+)를 "1AABB 3ABBC 2AB 1AC"에 매치시킬 경우 "1AABB", "3ABB", "2AB"를 반환 [본문으로]
  15. "123ABC456"에 "123W*456"을 매치시키면 "123ABC456" 반환 [본문으로]
  16. "123ABC456"에 "123W+456" 매치시키면 아무것도 반환하지 않음. "123[A-Z]+456" 매치시키면 "123ABC456" 반환 [본문으로]
  17. "A1B"에 "[A-Z]d?[A-Z]"를 매치시키면 "A1B" 반환 "AB"에 매치시키면 "AB" 반환 [본문으로]
  18. "this is the day."에 "th(e|is|at)"을 매치시키면 "the", "this" 반환. [본문으로]
  19. "10 20 30"에 "(d) (d) (d)"를 매치시키고 "$3, $2, $1"로 바꾸면 "30 20 10"로 바뀜 [본문으로]



출처: https://honsal.tistory.com/entry/Regexp-2015-08-19 [혼살의 일상 이야기]

출처: https://honsal.tistory.com/entry/Regexp-2015-08-19 [혼살의 일상 이야기]

댓글