정규표현식 실습해보자
정규표현식 실습해보자
정규표현식은 규칙에 맞는 문자열을 찾는 방법
/[A-Z]\w+/g : 대문자 A-Z 로 시작하는 아무 문자
앞 뒤의 / 는 정규표현식의 시작과 끝을 나타냄
g 위치는 flags g는 정규표현식에 맞는 모든 문자열을 찾는 것
flags 는 이번 내용에서 생략
https://regexr.com/ 에서 직접 해보자
아래에서 표현한 regex 는 모두 /{표현식}/g 의 표현식 부분에 들어감
기본사용법
찾고자 하는 문자를 그대로 입력하면 찾을 수 있음.
공백도 개수가 맞아야 함
- source
single and double
- regex
single
single and double
^ 은 문자열 전체에서 첫 부분
$ 은 문자열 전체에서 마지막 부분
- source
http://www.naver.com
- regex
^http
com$
특수기호는 이스케이핑() 처리해야 찾을 수 있음
- source
$300
- regex
^\$
- source
hi^
- regex
\^$
- source
\\hello
- regex
^\\\\
. 은 모든 문자를 뜻함
- source
Regular expressions
- regex
.
.....
- source
O.K.
- regex
\..\.
대괄호
대괄호는 대괄호안의 문자중 하나를 찾음
- source
How do you do?
- regex
[oyu]
[dH].
[owy][yow]
대괄호 안의 - 는 범위를 뜻함
- source
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789
- regex
[C-K]
[CDEFGHIJK]
[C-Ka-d2-6]
대괄호 안의 ^ 은 not 을 의미함
- source
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789
- regex
[^CDghi45]
[^W-Z]
소괄호
소괄호는 표현된 단어 자체를 찾음
소괄호 안의 |
은 or 의 의미함
- source
Monday Tuesday Friday Thursday
- regex
(sda)
(on|ues|rida)
(Mon|Tues|Fri)day
..(id|esd|nd)ay
수량자 (Quantifier)
*
: 앞의 문자가 0 ~ n 개 = {0, }
+
: 앞의 문자가 1 ~ n 개 = {1, }
?
: 앞의 문자가 0 ~ 1 개 = {0, 1}
- source
aaabc aabc abc bc
- regex
a*b
a+b
a?b
- source
-@- *** -- "*" -- *** -@-
- regex
.*
-A*-
[-@]*
- source
-@@@- * ** - - "*" -- * ** -@@@-
- regex
\*+
-@+-
[^ ]+
- source
-XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
- regex
-X?XX?X
-@?@?@?-
[^@]@?@
중괄호
{} 중괄호는 수량자를 보다 정교하게 표현하기 위함
- source
One ring to bring them all and in the darkness bind them
-regex
.{5}
[els]{1,3}
[a-z]{3,}
수량자는 기본적으로 최대한의 매칭 결과를 표현함
- source
One ring to bring them all and in the darkness bind them
- regex
r.*
수량자 뒤의 ?는 앞의 수량자를 가장 적게 일치시킴 lazy quantifier
- source
One ring to bring them all and in the darkness bind them
- regex
r.*?
r.+?
r.??
- source
<div>test</div> <div>test</div>
- regex
<div>.+<\/div>
<div>.+?<\/div>
\w 는 단어인 경우 = [A-z0-9_]
- source
A1 B2 c3 d_4 e:5 ffGG77--__--
- regex
\w
[A-z0-9_]
[a-z]\w*
\w{5}
\W 는 모든 단어가 아닌 경우
- source
AS _34:AS11.23 @#$ %12^*
- regex
\W
[^A-z0-9_]
\w
\s 는 공백인 경우, \S 는 공백이 아닌 경우
- source
Ere iron was found or tree was hewn, When young was mountain under moon; Ere ring was made, or wrought was woe, It walked the forests long ago.
- regex
\s
\S
\d 는 숫자인 경우, \D 는 숫자가 아닌 경우
- source
Page 123; published: 1234 id=12#24@112
- regex
\d
\D
[0-9]
\b 는 단어의 경계인 경우, \B 는 단어 경계가 아닌 경우
앞에 쓰이는 \b 는 단어의 앞, 뒤에 쓰이는 \b 는 단어의 뒤
- source
Ere iron was found or tree was hewn, When young was mountain under moon; Ere ring was made, or wrought was woe, It walked the forests long ago.
- regex
\b\w{0,2}
\w{0,2}\b
\B.\B
\A 는 문자열의 시작, \Z 는 문자열의 끝을 의미. 여러행이 경우도 처음과 마지막을 뜻함
- source
Ere iron was found or tree was hewn, When young was mountain under moon; Ere ring was made, or wrought was woe, It walked the forests long ago.
- regex
\A...
...\Z
(?=
- source
AAAX---aaax---111
- regex
\w+(?=X)
\w+
\w+(?=\w)
항상 정규표현식이 옳은가?
If 문을 안써서 좋지만 복잡해지면 가독성이 낮아진다.