본문 바로가기

IT공부

정규 표현식(=정규식)

반응형

참고 링크는 여기입니다.

정규식 패턴은 /abc/ 같이 단순 문자로 구성될 수 있고, /ab*c/ 또는 /Chapter (\d+)\.\d+/ 와 같이 단순 문자와 특수 문자의 조합으로도 구성될 수 있습니다. 

 

1. 단순 패턴 사용하기

단순 패턴은 문자열을 있는 그대로 대응시키고자 할 때 사용됩니다. 예를 들어, /abc/라는 패턴은 문자열에 정확히 'abc'가 순서대로 나타나야 대응됩니다.

 

2. 특수 문자 사용하기

Character Meaning
\

- 특수 문자가 아닌 문자 앞에 사용된 백슬래시는 '해당 문자는 특별하고, 문자 그대로 해석하면 안된다'는 사실을 가리킨다. 예를 들어, 앞에 \가 없는 'b'는 보통 소문자 b가 나오는 패턴과 대응되지만 '\b'는 어떤 문자와도 대응되지 않는다.

- 특수 문자 앞에 위치한 백슬래시는 '다음에 나오는 문자는 특별하지 않고, 문자 그대로 해석되어야 한다.'는 뜻이다. 예를 들어, 패턴 /a*/에서의 특수문자 '*'는 0개 이상의 'a'문자가 등장함을 나타낸다. 이와 다르게 /a\*/은 '*'이 특별하지 않다는 것을 나타내며, a*와 같은 문자열에 대응될 수 있다.

\d: 숫자, \w: 영문자 및 _문자, \s: 공백 문자 \D: 숫자 제외 문자, \S: 공백 제외 문자, \W: 영문자 및 _ 문자 제외'

^ 입력의 시작 부분에 대응된다. 예를 들어, /^A/는 "an A"의 A와 대응되지 않는다. 그러나 "An E"의 'A'와는 대응된다.
$ 입력의 끝부분과 대응된다. 예를 들어, /t$/는 "eater"가 아닌 "eat"의 t와 대응된다.
*{0,} 앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응된다.
+{1,} 앞의 표현식이 1회 이상 연속으로 반복되는 부분과 대응된다. 예를 들어 "candy", "caaaandy"모든 'a'와 대응된다.
?{0,1}

- 앞의 표현식이 0 또는 1회 등장하는 부분과 대응된다. /\d+/를 "123abc"에 적용시키면 123과 대응된다. 그러나 /\d+?/는 오직 1과만 대응된다.

- 또한 x(?=y)와 (x?!y) 항목에서 설명하는 바와 같이 사전 검증에서도 쓰인다

. 개행 문자를 제외한 모든 단일 문자와 대응된다.
(x) 패턴 /(foo) (bar) \1 \2/안의 '(foo)'와 '(bar)'은 문자열 "foo bar foo bar"에서 처음의 두 단어에 대응되고 이를 기억한다. 패턴 내부 \1, \2는 문자열의 마지막 두 단어에 대응된다. (\n: n번째 포획괄호에 대응된 문자열과 똑같은 문자열에 대응된다.)
{n} 앞 표현식이 n번 나타나는 부분에 대응된다. 예를 들어 /a{2}/는 " candy,"의 'a'에는 대응되지 않지만, "caandy,"의 모든 a와, "caaandy."의 첫 두 a에 대응된다.
{n, m} n<=m을 만족해야 한다. 앞 문자가 최소 n개, 최대 m개가 나타나는 부분에 대응된다. /a{1,3}/은 "cndy"에서 아무것에도 대응되지 않지만, "caandy"의 첫 두 a와 "caaaaaaandy"의 첫 세 a의 대응된다.
(?:x) x에 대응되지만 대응된 것을 기억하지 않는다. 예를 들어, /(?:foo) {1,2}/을 생각해보자. 만약 정규식이 /foo{1,2}/라면, {1,2}는 'foo'의 마지막 'o'에만 적용된다. 비포획 괄호가 같이 쓰이면 {1,2}는 단어 'foo'전체에 적용된다.
[xyz] 문자셋은 괄호 안의 어떤 문자와도 대응된다. 예를 들어, /[a-z.]+/와 /[\w.]+/는 "test.i.ng" 전체 문자열이 일치한다.
[^xyz] 부정 문자셋은 괄호 내부에 등장하지 않는 어떤 문자와도 대응된다. 예를 들어, [^abc] 와[^a-c] 모두 "brisket"의 'r', 'chop.'의 'h'에 대응된다.

 

반응형

'IT공부' 카테고리의 다른 글

Go 언어 공부해보기  (0) 2020.06.28
HADOOP 이란  (0) 2020.02.02
node 버전 관리하기  (0) 2019.09.18
anaconda(가상환경)를 이용한 gensim과 konlpy 설치 순서  (0) 2019.02.21
php vs. Node  (0) 2019.02.12