정규표현식 기본 정리 (언어마다 조금씩 다를 수 있음)
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 |
아래 페이지에서 실습하기 좋음
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

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
'programming > Others' 카테고리의 다른 글
| 2진수(Binary), 16진수(Hexadecimal), 10진수(Decimal), 압축, 선형탐색, 이진탐색 (0) | 2023.04.26 |
|---|---|
| 컴퓨팅 사고의 4가지 요소 (1) | 2023.04.22 |



