Skip to main content

정규표현식 기본

·350 words·2 mins· loading

http://zvon.org/comp/r/tut-Regexp.html#Pages~Page_1 참고함

위치와 이스케이핑

^ = ^ 뒤에 있는 패턴이 시작되는 부분에 있는것 검출

^ who = who로 시작하는거 검출

$ = $뒤에있는 패턴이 끝나는 부분인거 검출

who$ = $who로 끝나는거 검출

만일 ^,$가 소스상에 있다면? : 역슬래시를 해준다. (이스케이프)

모든문자

. (점) 은 모든 문자를 의미

….. 어떠한것도 상관없이 5개의 문자를 가지고있는거

만일 . 을 찾으려면 이스케이프!

특정문자

[] 사용 (문자 하나를 해당)

[-] = range

[a-Z] = a부터 Z까지의 모든 문자 [c-ka-d2-6] = c에서 k, a에서 d, 2에서 6까지의 모든문자

[] 안에서의 ^ 은 xor, 즉 아닌 걸 의미함

패턴들

(on|use|rida) 한덩어리임

문자열 중 on,use,rida를 찾음

(Mon|Tues|Fri)day 이런식으로 씀

수량자 (Quantifiers)

어떠한 패턴이 얼마나 등장하는가

  • , + , ?

  • = * 앞의 문자가 있을수도있고 없을수도있다.

a*b = b 앞에 a 가b앞에 a가 있을수도있고, 없을수도있다

  • = + 앞의 문자가 반드시 하나 이상이어야 됨

a+b = b 앞에 a 가 1개 이상

? = ?앞의 문자가 없거나 1개

a?b = b 앞에 a가 하나이거나 없다.

[ ^ ]+ 공백이 아닌것이 하나이상일#때

.{5} = . ,즉 어떠한 문자든 간에 5개가 와야됨

[els]{1,3} = e,l,s 중 하나가 1~3번 등장

[a-z]{3.} = a부터z까지의 문자가 3 이상

r.* = r 뒤에 어떤문자가 있을수도있고, 없을수도 있다

수량자 뒤에 물음표가 온다면, 0,1이라는 뜻이 아니라 그냥 0임 (가장작은수가 선택됨)

만일 뒤에 설명한 div예제같은 경우에는, 매치되는것 중 가장 적은 수임(선택 범위를 lazy)

r.*? = r 뒤에 아무것도 오지 않음

r.+ = r 뒤에 어떤 문자라도 하나이상 와야됨

r.+? = r 뒤에 문자가 하나만옴

r.? = r 뒤에 어떤 문자가 1이나 0개

r.?? = r 뒤에 암것도 오지 않음

탐욕적/게으름

test
test2
****

≤div>.+

로 매칭하면, 첨부터 끝까지 찾아짐 이를 탐욕적이라함

따라서

.+?
를 사용하면, 하나만 찾아짐 이를 게으름이라함

경계

\w =[a-z0-9]를 나타냄 (word)

\W=[^A-z0-9]를 나타냄 (word가 아니다)

\d = 숫자 [0-9]

\D = 숫자가 아님

워드 바운더리 (\b)

\b\w 단어가 시작되는 지점

\w\b 단어가 끝나는 지점

\b\w\b 단어가 하나인 단어

\b\\w+\b 단어가 하나이상인 단어

\B. 직접해봐야 이해됨 \b의 반대

\A… =문장시작점에 3개의 문자

…\Z = 문장 뒤에있는 3개의 문자

^,$ 은 multiline 즉 여러줄일대 각자 선택

\A,\Z는 multiline이여도 첫번째만

패턴들

(?=X)의 의미= 검색할때는 X를 쓰지만, 선택할때는 제외함

문자=AAAX—aaax—111

\w+(?=X)

AAA만 선택됨

\w+(?=\w) 뒤에 아무문자나 하나 들어가지만, 그 문자는 선택되지 않음

AAA,aaa,11 선택됨