리눅스에서도 많이 사용되고, 윈도우에선 노트패드++로 수많은 파일 중에서 원하는 문자열이 들어가 있는 파일을 찾을 때, 소스 코드에서 특정 부분들을 찾을 때 자주 사용되는 정규식의 기본적인 사용 방법을 정리해보겠습니다.
\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) : 인라인 주석
#(줄의 마지막에서) : 주석
- 리눅스, 맥 등에서는 일반적으로 새 줄을 매치할 때 n만 쓰면 되나, 윈도우 환경에서 일반적인 텍스트 에디터로 작성된 경우 rn을 사용해야 새 줄이 정상적으로 매치됩니다. [본문으로]
- cC : Ctrl + C 매치 [본문으로]
- "가나다a라마바b사아자" 에 [abc]를 글로벌 매치시키면 "a", "b", "c"가 반환된다. [본문으로]
- "가나다a라마바b사아자c"에서 [^abc]를 글로벌 매치시키면 "가", "나", "다", "라", "마", "바", "사", "아", "자" 반환. [본문으로]
- "동해물과 USa"에 [A-Z]를 글로벌 매치시키면 "U", "S" 반환. [본문으로]
- 단어를 매치한단 뜻이 아니다. "IDEA 1.7"에서 "I", "D", "E", "A", "1", "7"을 반환한다. [본문으로]
- "IDEA 1.7"에서 " ", "." 반환 [본문으로]
- n(new line) 문자가 있을 경우 해당 문자 반환. 없을 경우 문자열의 끝 문자 반환. [본문으로]
- "ABC-DEF-"에 "A[A-Z]{3}-"을 매치시켰을 때 "ABC-"가 반환됨. [본문으로]
- "ABC-DEF-"에서 "[A-Z]{3}-Z"을 매치시켰을 때 "DEF-" 반환 [본문으로]
- "(1)(2)(3)[4](5)"에 "[G(D)"를 매치시키면 "(1)", "(2)", "(3)" 반환 [본문으로]
- 프로그래밍에선 정규식 클래스의 Captures 멤버 등등에 저장되고, 노트패드++ 등에선 n으로 캡쳐된 문자를 불러올 수 있다. [본문으로]
- (정규식) 그룹에서 캡쳐된 문자는 1, 2등 숫자로만 불러올 수 있지만 이 방법으로 캡쳐한 문자는 k으로 불러올 수 있다. [본문으로]
- [123](?>A+B+)를 "1AABB 3ABBC 2AB 1AC"에 매치시킬 경우 "1AABB", "3ABB", "2AB"를 반환 [본문으로]
- "123ABC456"에 "123W*456"을 매치시키면 "123ABC456" 반환 [본문으로]
- "123ABC456"에 "123W+456" 매치시키면 아무것도 반환하지 않음. "123[A-Z]+456" 매치시키면 "123ABC456" 반환 [본문으로]
- "A1B"에 "[A-Z]d?[A-Z]"를 매치시키면 "A1B" 반환 "AB"에 매치시키면 "AB" 반환 [본문으로]
- "this is the day."에 "th(e|is|at)"을 매치시키면 "the", "this" 반환. [본문으로]
- "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 [혼살의 일상 이야기]
'IT' 카테고리의 다른 글
frontierz 카드게임 (0) | 2021.06.30 |
---|---|
정규식(regular expression) 사용 예시들 - 실무에 사용 후 기억하기 위해 (0) | 2021.06.28 |
다빈치 리졸브 16 쉬운 초보용 사용법 1 (설정 및 셋팅) (0) | 2021.06.28 |
티시아이티 Webプログラマー正社員採用(キャリア無関係) (0) | 2021.06.27 |
リクエストパラメータの取得(getParameter) (0) | 2021.06.27 |
댓글