티스토리 뷰

정규표현식 기본 정리 (언어마다 조금씩 다를 수 있음)

 

1. 텍스트를 그대로 적어주기

Hello "Hello"를 찾아줌, "hello"는 찾을 수 없음

정규표현식은 기본적으로 대소문자를 구분한다

 

2. 

Hello, world "Hello, world"를 찾아줌
"Hello,  world"는 찾을 수 없음

공백의 수도 정확히 구분한다

3.

^ caret, 그 다음에 붙은 것이 찾는 곳에서 맨 앞에 있을 경우를 의미
^abc "abc" 찾을 수 있음
"babc" 찾을 수 없음
단어 기준이 아니라 공간의 맨 앞을 의미
"""
abc is abc
abc is abc
"""
인 경우 첫 번째 줄 맨 앞의 abc만 찾아짐 (환경마다 다른듯)

단어의 시작되는 부분을 찾을 때는 ^, caret을 사용함

$ $, 소스의 끝에 위치하는 대상을 지목할 때 찾을 수 있음
abc$ "abc" 찾을 수 있음
"babc" 찾을 수 있음
"abcb" 찾을 수 없음
단어 기준이 아니라 공간의 맨 끝을 의미
"""
abc is abc
abc is abc 
""" 
인 경우 두 번째 줄의 마지막 abc만 찾아짐(환경마다 다른듯)

4.

대상이 되는 source $12$ \-\ $25$
^$ 아무것도 찾을 수 없음
^ 시작을 의미
$ 끝을 의미
찾을 대상이 정해지지 않음
\$ 백슬래시를 사용하면 백슬래시 뒤의 문자를 의미가 있는 문자가 아니라 단순한 문자로 인식
$12$ \-\ $25$
볼드, 이탤릭 처리된 모든 달러 찾을 수 있음
^/$ $12$ \-\ $25$
^ 시작을 의미
\$ 의미(기능)없는 문자 $을 의미
맨 앞에 있는 $를 찾는 것임
\ escape, 탈출을 의미하는데
\$ 인경우에 $가진 기능에서 탈출시키고 그냥 $를 찾는다는 의미
\$$ $12$ \-\ $25$
\\ $12$ \-\ $25$

5.

대상이 되는 source Regular expressions are powerful!!!
. Regular expressions are powerful!!!
모든 character(문자)를 의미
...... 6개의 문자를 의미,
Regular expressions are powerful!!!
인데 순서대로 6개가 잡힘.. 어떤 의미냐면
[Regula][r expr][ession][s are ][powerf]ul!!!
으로 찾아짐

 

대상이 되는 source O.K.
. O.K.
\. O.K.
\..\. O.K.

나눠서 보면

\. . 
. 모든문자(any character)
\. . 

.모든문자. 인 조합을 찾는 것임

6.

[] 대괄호, square braket
a list of characters로 문자 하나를 찾는 것
대상이 되는 source How do you do?
[oyu] How do you do?
[dH]. How do you do?

[dH] d 또는 H 
.  모든 문자
[owy][yow] How do you do?

[][] 두개의 문자를 의미
첫번째 문자는 o or w or y
두번째 문자는 y or o or w 인 경우의 2개의 문자를 찾음

7.

- dash,a range of chracters 를 의미
대상이 되는 source ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[C-K] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[CDEFGHIJK] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[a-d] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[2-6] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[C-Ka-d2-6] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789

8.

[^] caret이 대괄호 안에서 사용된 경우 not을 의미
대상이 되는 source ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[^CDghi45] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789
[^W-Z] ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz 0123456789

9.

(on|ues|rida) () braket 사이의 | pipe는 or을 의미
on 이거나 ues 이거나 rida를 찾는것
subpattern 이라고 지칭
대상이 되는 source Monday Tuesday Friday
(on|ues|rida) Monday Tuesday Friday
(Mon|Tues|Fri)day Monday Tuesday Friday
..(id|esd|nd)ay Monday Tuesday Friday

10.

* 별표, asterisk
별표 앞에 어떤 패턴이 0에서 n개 등장하는 것 (있는 것, 없는 것 모두 포함)
+ 더하기, plus
+ 앞에 어떤 패턴이 1개이상 등장하는 것(0개 되지 않음)
? 물음표, question mark
? 앞에 어떤 패턴이 0개 혹은 1개 등장하는 것
대상이 되는 source aabc abc bc
a*b aabc abc bc
a가 0개부터 n개 있고 그 다음에 b가 있는 조합
a (a or aaaaa.... or non) b 의 조합 
a+b aabc abc bc
a?b aabc abc bc
대상이 되는 source -@-***--"*"--***-@-
.* -@-***--"*"--***-@-
모든문자가 해당되는 .이 0개일 수도 있고 n개일 수도 있어서 모두 다 선택됨
-A*- -@-***--"*"--***-@-
- 다음에 A가 0개 혹은 n개 그 다음에 다시 -
대문자 A가 없으니 -- 만 가능
[-@]* -@-***--"*"--*** -@-
-이거나 @ 다음에 -나 @가 더 나올 수도 있고 아닐수도 있다
대상이 되는 source -@@@-***--"*"--***-@@@-
\*+ -@@@-***--"*"--***-@@@-
-@+- -@@@-***--"*"--***-@@@-
[^ ]+ -@@@-***--"*"-- ***-@@@-
대상이 되는 source --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
-X?XX?X --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
-@?@?@?- --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
[^@]@?@ --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-

11.

{} curly bracket, 전의 패턴이 중괄호 안의 숫자만큼 반복되는 것
{n,m} 인 경우에는 n은 최소 개수, m는 최대 개수
{n, } 인 경우에는 n 이상이기만 하면 됨
대상이 되는 source One ring to bring them all and in the darkness bind them
.{5} One ring to bring them all and in the darkness bind them
[els]{1,3} One ring to bring them all and in the darkness bind them
[a-z]{3,} One ring to bring them all and in the darkness bind them
r.* One ring to bring them all and in the darkness bind them
r.*? One ring to bring them all and in the darkness bind them
수량자 뒤에 ?가 붙는 경우에는 가능한 한 최소한 범위를 선택하게 됨
r다음에 .이 가능한 경우는 0과 n개인데, 0이 최소가능한 범위이기 때문에 r만을 찾게 됨
r.+ One ring to bring them all and in the darkness bind them
r.+? One ring to bring them all and in the darkness bind them
r다음에 .이 가능한 경우는 1개 또는 n개인 경우인데 최소로 선택할 수 있는 경우를 선택하기 때문에 r다음에애니캐릭터가 1개인 곳을 찾음

r.? One ring to bring them all and in the darkness bind them
r.?? One ring to bring them all and in the darkness bind them
r다음에 .이 0개 혹은 1개인 상황에서 가능한 한 최소범위인 r다음에 .이 0개인 범위를 찾게 됨
수량자 뒤의 물음표를 왜 사용할까? 가능한 최소한의 범위를 찾게 됨 
대상이 되는 source <div>test</div><div>test2</div>
<div>.+</div> <div>test</div><div>test2<div>
<div>.+?</div> <div>test</div><div>test2</div>
?가 +수량선택자 뒤에 붙었으니
<div></div> 사이에 any character가 1개 이상인 경우에서 최소한으로 선택가능한 상황을 찾게 된다
그래서 <div>test</div>를 찾게 된다 (전체가 아님)
\w 문자
알파벳 대소문자와 숫자와 underscore
[A-z0-9__]
대상이 되는 source A1 B2 c3 d_4 e:5 ffGG77--__--
\w* A1 B2 c3 d_4 e:5 ffGG77--__--
[a-z]\w* A1 B2 c3 d_4 e:5 ffGG77--__--
\w{5} A1 B2 c3 d_4 e:5 ffGG77--__--
[A-z0-9_] A1 B2 c3 d_4 e:5 ffGG77--__--

12.

\W 문자가 아닌 것
숫자, 알파벳, underscore가 아닌 것
대상이 되는 source AS _34:AS11.23  @#$ %12^*
\W AS _34:AS11.23  @#$ %12^*
\w AS _34:AS11.23  @#$ %12^*
\d 숫자, digit
\D 숫자가 아닌 것
\s 공백
\S 공백이 아닌 것
\b a word boundary
말그대로 boundary이고, 그 자체로는 아무 것도 찾지 못한다
\b는 \b앞 혹은 뒤에 붙어서 붙어있는 패턴을 파악한후 \w인지 \W인지 구분한다.
그 다음 \w에 속하면 \W를 \b에 넣어서 찾는다
\W가 속하면 \d를 \w로 바꿔서 찾는다
대상이 되는 소스 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.
\b.

.은 모든것이 될 수 있음
최초 글자 E는 \w이기 때문에 \w가 뒤로 \W가 만나는 지점까지를 하나의 블럭으로 보고 맨앞자리를 반환
Ere가 \w이기 때문에 맨 앞의 E를 찾고 그다음 \W인 공백을 찾고, 그다음 iron에서 i를 찾음
.\b \w집단, \W로만 구성된 집단에서 각 집단의 뒤를 찾음)
Ere에서 e를 찾고, 공백에서 공백을 찾고, iron에서 n을 찾음
\B 경계가 아닌 것
\B. \w집단, \W집단을 찾아서 각 집단의 첫번째가 아닌 것을 찾는다
합쳐서 찾는게 아니라 각각 찾아짐 r,e,r,o,n
.\B \w집단, \W집단을 찾아서 각 집단의 마지막이 아닌 것을 찾음

13.

\A 시작을 의미(환경마다 다른듯)
\Z 마지막을 의미(환경마다 다른듯)

14.

(?=<pattern>) <pattern>을 검색을 하지만 찾지는 않음
대상이 되는 source AAAX---aaax---111
\w+(?=X)
AAAX---aaax---111
\w+X 인 경우를 검색해서 \w+만 찾음
\w+(?=\w) AAAX---aaax---111
\w+\w인 경우를 검색해서 \w+만 찾음
(?!<pattern>)
?! 뒤에 pattern 을 검색해서 존재한다면 앞의 부분을 반환하지 않음
대상이 되는 source
AAAX---AAA
AAA(?!X) AAAX---AAA

 

 

 

 

 

 

 



아래 페이지에서 실습하기 좋음

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

참고

https://okky.kr/article/298826
https://stackoverflow.com/questions/14213848/difference-between-and
http://zvon.org/comp/r/tut-Regexp.html
https://opentutorials.org/module/622/5143

오픈튜토리얼즈의 twinbraid님의 댓글

 

OKKY | 정규표현식에 대해 질문이 있습니다..

안녕하세요.. 제가 정규표현식에 많이 약한 관계로..ㅠㅠ..이렇게 질문을 올려봅니다.. 비밀번호 정규표현식을 만들고 있는데.. 조건은 다음과 같습니다.. 1. 글자는 10~16자사이어야 한다 2. 대소

okky.kr

 

Difference between ".+" and ".+?"

Can someone please explain the difference between .+ and .+? I have the string: "extend cup end table" The pattern e.+d finds: extend cup end The pattern e.+?d finds: extend and end I know that ...

stackoverflow.com

 

Regular Expressions Tutorial @ZVON.org

 

zvon.org

 

정규표현식 패턴들 - 정규 표현식

본 수업은 zvon의 정규표현식 tutorials를 이용한다. 실제 강의는 동영상을 참고하자. zvon은 아래의 URL을 통해서 접근 할 수 있다. http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents 아래는 인터렉티브하게 정

opentutorials.org

https://www.youtube.com/watch?v=Gg0tlbrxJSc

 

댓글