"정규 표현식"의 두 판 사이의 차이

155번째 줄: 155번째 줄:
| + || {1,} || 1개 ~ 무한대. (즉 1개 이상)
| + || {1,} || 1개 ~ 무한대. (즉 1개 이상)
|}
|}
==전통 문법 규칙==
[[사이퍼 질의어]], [[sed]], [[vim]], [[펄]] 등 여러 언어와 구현체에서는 다음과 같거나 비슷한 문법 규칙을 따른다.
    메타문자 ;; 표현할 정규식을 지정하는 메타문자들의 열이다.
    =~ m//          ;; 문자열 매칭 동작을 지정한다. (m은 생략 가능)
    =~ s///        ;; 문자열 치환 동작을 지정한다.


==용도 예시==
==용도 예시==

2018년 8월 15일 (수) 15:08 판

1 개요

regular expression; regexp; regex
정규 표현식, 정규표현, 정규식
  • 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
  • 원하는 문자열을 검색·추출·치환하기 위해 사용하는 패턴식
  • 문자열 집합을 정확하게 표현하기 위해 쓰이는 언어

2 메타 문자

  • 원래의 문자 용도가 아닌 특별한 목적으로 사용 되는 문자
기호 의미 예시
{ } 반복개수 a{2,3} → a가 2~3개
[ ] 문자클래스 [ab] → a, b 중 한글자, [a-g] → a~g 중 한글자, [^0-9]→ 숫자가 아닌 문자

3 문자 범위

  • [ ]사이에 문자가 있으면 이 문자 중 하나는 매치가 된다는 의미임
→[ab]의 정규식으로 apple 문자열에 매치 시험을 해보면 a가 찾아지는 것을 알 수 있음
var pattern = /[ab]/;
var str = "apple";
console.log(str.match(pattern)); // ["a"]
  • [ ]사이의 문자에 하이픈이 있으면 두 문자 사이의 범위를 의미하게됨
→[a-c]의 정규식으로 banana 문자열에 매치 시험을 해보면 b가 찾아지는 것을 알 수 있음
var pattern = /[a-c]/;
var str = "banana";
console.log(str.match(pattern)); // ["b"]
  • [ ]사이의 문자에 ^가 있으면 지정한 문자가 없을 경우 매치 됨을 의미함
→[^a-c]의 정규식으로 abcd 문자열에 매치 시험을 해보면 d가 찾아지는 것을 알 수 있음
var pattern = /[^a-c]/;
var str = "abcd";
console.log(str.match(pattern)); // ["d"]

4 메타문자2

메타문자 설명 동일표현
. \n, \r이 아닌 모든 문자 [^\n\r]
\d 숫자를 찾음 [0-9]
\D 숫자가 아닌 것을 찾음 [^0-9]
\s whitespace를 찾음 [ \t\n\r\v\f]
\S whitespace가 아닌 것을 찾음 [^ \t\n\r\v\f]
\w 문자와 숫자를 찾음 [a-zA-Z0-9_]
\W 문자와 숫자가 아닌 것을 찾음 [^a-zA-Z0-9_]
→ whitespace 문자란 ? space, tab, carriage return, new line, vertical tab, form feed
  • .는 어떤 문자든 매치가 가능함

5 메타문자3

메타문자 의미 설명
| or a|b → a 혹은 b
^ 시작 ^a → a로 시작함
$ a$ → a로 끝남
\b 단어 경계 a\b→ a로 끝나는 단어 경계
\B 단어 경계의 반대 b\B→ B로 끝나는 단어 경계가 아닌 것
\ 이스케이프
  • | 를 사용하면 or의 의미를 지님
→ john 과 jmnote 둘 중 하나만 맞는 것이 있으면 그것을 매치가 된다고 판단함
var pattern = /john|jmnote/;
var str = "My name is john";
console.log(str.match(pattern)); // ["john"]
var str2 = "My name is jmnote";
console.log(str2.match(pattern)); // ["jmnote"]
  • ^를 사용하면 문자열의 시작이 패턴과 일치하는지 찾음
→시작이 John으로 시작하는지를 판단
var pattern = /^John/;
var str = "John is running";
console.log(str.match(pattern)); // ["John"]
→문자열이 john으로 시작하지 않기 때문에 아무것도 매치되는 것이 없음
var pattern = /^John/;
var str = "Jmnote is running with John";
console.log(str.match(pattern)); // null
  • $를 사용하면 문자열의 끝이 패턴과 일치하는지를 찾음
→문자열이 john으로 끝나기 때문에 John과 매치됨
var pattern = /john$/;
var str = "jmnote is running with john";
str.match(pattern); // ["john"]
  • \b를 사용하면 경계지점의 문자를 찾음
→문자 n을 끝나는 경계지점으로 가지는 단어와 매치
var pattern = /n\b/;
var str = "John is running.";
console.log(str.match(pattern)); // ["n"]
→문자 J를 시작 경계지점으로 가지는 단어와 매치
var pattern = /\bJ/;
var str = "John is my name.";
str.match(pattern); // ["J"]

6 캡쳐 그룹

  • 정규 표현식에서 그룹 캡쳐가 가능함
  • 캡쳐는 $n 타입으로 표현함 ($1, $2, $3...)
  • $0은 의미가 없음
  • $&은 매칭된 값을 찍어줌
var str = "abcde";
var pattern = /([a])/g;
console.log(str.replace(pattern, "$1$1"));  //aabcde
→ 패턴인 문자 'a'를 만나면 캡쳐1을 두번 바꿔줌
var str = "abcde";
var pattern = /[a-c]|([d-f])/g;
console.log(str.replace(pattern, "$&$1")); // abcddee
→ "a-c"에 포함 되거나 "d-f"에 포함 되면 패턴을 만족함. 단, "d-f"의 경우 $1 캡쳐를 통해 캡쳐 값이 한번 그리고 $&를 통해 캡쳐된 값이 한번 더 찍힘

7 수량자

기호 의미 설명
? {0,1} 0개(없거나) ~ 1개
* {0,} 0개(없거나) ~ 무한대
+ {1,} 1개 ~ 무한대. (즉 1개 이상)

8 전통 문법 규칙

사이퍼 질의어, sed, vim, 등 여러 언어와 구현체에서는 다음과 같거나 비슷한 문법 규칙을 따른다.

   메타문자 ;; 표현할 정규식을 지정하는 메타문자들의 열이다.
   =~ m//          ;; 문자열 매칭 동작을 지정한다. (m은 생략 가능)
   =~ s///         ;; 문자열 치환 동작을 지정한다.

9 용도 예시

  • 프로그래밍 언어 문자열 처리
  • 텍스트편집기 문자열 변환
  • Rewrite 엔진

10 같이 보기

11 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}