# 정규표현식 이란?
정규표현식은 줄여서 정규식(영어로는 Regular Expression이고 줄여서 Regex, Regexp 등으로 불린다.) 이라고도 하는데, 컴퓨터 과학의 정규언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어이다.
Character | Meaning |
---|---|
\ | 다음의 규칙에 따라 일치합니다: |
^ | 입력의 시작 부분에 대응됩니다. 만약 다중행 플래그가 참으로 설정되어 있다면, 줄 바꿈 문자 바로 다음 부분과도 대응됩니다. 예를 들어, /^A/ 는 "an A" 의 'A'와는 대응되지 않습니다, 그러나 "An E" 의 'A'와는 대응됩니다.' ^ ' 가 문자셋([abc]) 패턴의 첫 글자로 쓰인다면, 그 때는 전혀 다른 의미를 가집니다. 자세한 내용은 역 문자셋을 참고하세요. |
$ | 입력의 끝 부분과 대응됩니다. 만약 다중행 플래그가 참으로 설정되어 있다면, 줄 바꿈 문자의 바로 앞 부분과도 대응됩니다. 예를 들어, |
* | 앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응됩니다. {0,} 와 같은 의미입니다. 예를 들어, |
+ | 앞의 표현식이 1회 이상 연속으로 반복되는 부분과 대응됩니다. 예를 들어, |
? | 앞의 표현식이 0 또는 1회 등장하는 부분과 대응됩니다. {0,1} 와 같은 의미입니다.예를 들어, /e?le?/ 는 "angel"의 'el' 에 대응되고, "angle"의 'le' 에 대응되고 또한 "oslo" 의 'l'에도 대응됩니다.만약 수량자 *, +, ?, {} 바로 뒤에 사용하면, 기본적으로 탐욕스럽던(가능한 한 많이 대응시킴) 수량자를 탐욕스럽지 않게(가능한 가장 적은 문자들에 대응시킴) 만듭니다. 예를 들어, /\d+/ 를 "123abc"에 적용시키면 "123"과 대응됩니다. 그러나 /\d+?/ 를 같은 문자열에 적용시키면 오직 "1"과만 대응됩니다.또한 이 문자는 x(?=y) 와 x(?!y) 항목에서 설명하는 바와 같이 사전 검증(lookahead assertion)을 위해서도 쓰입니다. |
. | 개행 문자를 제외한 모든 단일 문자와 대응됩니다. 예를 들어, |
(x) | 다음의 예제가 보여주는것 처럼 'x'에 대응되고, 그것을 기억합니다. 괄호는 포획 괄호(capturing parentheses)라 불립니다. |
(?:x) | 'x'에 대응되지만 대응된 것을 기억하지 않습니다. 괄호는 비포획 괄호(non-capturing parentheses)라고 불리우고, 정규식 연산자가 같이 동작할 수 있게 하위 표현을 정의할 수 있습니다. 정규식 예제 /(?:foo){1,2}/ 을 생각해보세요. 만약 정규식이 /foo{1,2}/ 라면, {1,2} 는 'foo'의 마지막 'o' 에만 적용됩니다. 비포획 괄호과 같이 쓰인다면, {1,2} 는 단어 'foo' 전체에 적용됩니다. |
x(?=y) | 오직 'y'가 뒤따라오는 'x'에만 대응됩니다. 이것은 lookahead 라고 불립니다. 예를 들어, |
x(?!y) | 오직 'y'가 뒤따라오지 않는 'x'에만 일치합니다. 이것은 negated lookahead 라고 불립니다. 예를 들어, |
x|y | 'x' 또는 'y'에 대응됩니다. 예를 들어, |
{n} | 앞 표현식이 n번 나타나는 부분에 대응됩니다. N은 반드시 양의 정수여야 합니다. 예를 들어, /a{2}/ 는 "candy,"의 'a'에는 대응되지 않지만, "caandy,"의 모든 a 와, "caaandy."의 첫 두 a 에는 대응됩니다. |
{n,m} |
예를 들어, |
[xyz] | 문자셋(Character set) 입니다. 이 패턴 타입은 괄호 안의 어떤 문자(이스케이프 시퀀스까지 포함)와도 대응됩니다. 점(. ) 이나 별표 (* ) 같은 특수 문자는 문자셋 내부에서는 특수 문자가 아닙니다. 따라서 이스케이프시킬 필요가 없습니다. 하이픈을 이용하여 문자의 범위를 지정해줄 수 있습니다.예를 들어, 패턴 [a-d] 는 패턴 [abcd] 와 똑같이 동작하며, "brisket"의 'b' 에 일치하고, "city"의 'c' 에 일치합니다. 패턴 /[a-z.]+/ 와 /[\w.]+/ 는 "test.i.ng" 전체 문자열이 일치합니다. |
[^xyz] | 부정 문자셋(negated character set) 또는 보충 문자셋(complemented character set)입니다. 괄호 내부에 등장하지 않는 어떤 문자와도 대응됩니다. 하이픈을 이용하여 문자의 범위를 지정할 수 있습니다. 일반적인 문자셋에서 작동하는 모든 것은 여기에서도 작동합니다. 예를 들어, 패턴 |
[\b] | 백스페이스(U+0008)에 대응됩니다. 이와 같이, 백스페이스 문자 리터럴에 대응시키려면, 대괄호("[]")를 이용해야만 합니다. (\b 와 혼동하지 마세요.) |
\b | 단어 경계에 대응됩니다. 단어 경계는 다른 '단어 문자'가 앞이나 뒤에 등장하지 않는 위치에 대응됩니다. 단어의 경계는 대응 결과에 포함되지 않는다는 사실에 주의하세요. 다른 말로는, 단어의 경계에 대응되는 문자열의 길이는 항상 0입니다. (패턴 예제: |
\B | 단어 경계가 아닌 부분에 대응됩니다. 아래와 같은 경우들이 있습니다:
문자열의 시작 부분과 끝 부분은 단어가 아닌 것으로 간주됩니다. 예를 들어, |
\cX | 문자열 내부의 제어 문자에 대응됩니다. 여기서 X는 A에서 Z까지의 문자 중 하나입니다. 예를 들어, |
\d | 숫자 문자에 대응됩니다. 예를 들어, |
\D | 숫자 문자가 아닌 문자에 대응됩니다. 예를 들어, |
\f | 폼피드 (U+000C) 문자에 대응됩니다. |
\n | 줄 바꿈 (U+000A) 문자에 대응됩니다. |
\r | 캐리지 리턴(U+000D) 문자에 대응됩니다. |
\s | 스페이스, 탭, 폼피드, 줄 바꿈 문자등을 포함한 하나의 공백 문자에 대응됩니다. 예를 들어, |
\S | 공백 문자가 아닌 하나의 문자에 대응됩니다. 예를 들어, |
\t | 탭 (U+0009) 문자에 대응됩니다. |
\v | 수직 탭(U+000B) 문자에 대응됩니다. |
\w | 밑줄 문자를 포함한 영숫자 문자에 대응됩니다. 예를 들어, |
\W | 단어 문자가 아닌 문자에 대응됩니다. 예를 들어, |
\n | 정규식 내부의 n번째 괄호에서 대응된 부분에 대한 역참조 입니다. 여기서, n은 양의 정수입니다. 예를 들어, |
\0 | 널 (U+0000)문자에 대응합니다. 이 때 다른 숫자를 뒤에 쓰지 마세요. 왜냐하면 \0<digits> 는 8진 이스케이프 시퀀스이기 때문입니다. |
\xhh | 코드가 hh(두 16진 숫자)인 문자에 일치합니다. |
\uhhhh | 코드가 hhhh(네개의 16진 숫자)인 문자에 일치합니다. |
# RegExp()
1. 정의
정규표현식(Regular Expression)을 사용하기 위한 객체를 생성한다.
1 2 3 4 | new RegExp(pattern [,flags]) // 생성자 방식 /pattern/flags // 정규표현식 리터럴 | cs |
인자명 | 데이터형 | 필수/옵션 | 설명 |
---|---|---|---|
pattern | string | 필수 | 정규표현식 |
flags | 옵션 |
|
# 정규식 참고 사이트
1. REGEXPER(https://regexper.com)
정규식을 입력하면 도식화 하여 보여주는 사이트
1. RegExr(https://regexr.com/)
정규식을 입력하고 TEXT를 입력하면 해당 텍스트가 정규식에 올바른지 올바르지 않은지를 판단해 주는 사이트 Tools에 좋은 도구들이 많으므로 많은 도움이 되는 사이트
# 마무리
위 포스트는 제가 직접 제작한 것 입니다.
그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.
만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.
빠른 처리 하도록 하겠습니다.
티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요
(URL : http://junprogramer.tistory.com/)
읽어주셔서 감사합니다.
'잡다한 기술' 카테고리의 다른 글
아이디어 마루 교육 (0) | 2018.07.29 |
---|---|
아이디어 마루 1차 합격 + 1차 미팅 (0) | 2018.07.16 |
[백준 알고리즘 2741]N 찍기 (0) | 2018.07.02 |
[백준 알고리즘 2839]설탕 배달 (0) | 2018.07.01 |
[JAVA SCRIPT/자바 스크립트]호이스팅(Hoisting)를 알아보자 (0) | 2018.06.25 |