일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Convolution
- 부스트캠프
- convolution 역전파
- 부스트캠프 aitech3기
- 베이즈통계학
- Sequential Model
- 네이버커넥트
- regex
- summarise( )
- Filter
- col_names
- 정규표현식
- 자바스크립트
- 생활코딩
- aitech
- LinearNeuralNetwork
- 역전파알고리즘
- JavaScript
- 네이버커넥트재단
- 모각공
- NomadCoder
- group_by( )
- regular expression
- RNN
- 부스트캠프aitech3기
- mutate( )
- r
- Beyond Linear Neural Networks
- dplyr
- Multi-Layer Perceptron
- Today
- Total
clear_uncertainty
정규표현식(Regular Expression)에 대하여 - 수량자(Quantifier) (11~17) 본문
정규표현식(Regular Expression)에 대하여 - 수량자(Quantifier) (11~17)
SOidentitiy 2021. 10. 7. 17:19
본 포스팅은 생활코딩님의 정규표현식 토픽을 공부하고 정리한 내용입니다.
åç본 포스팅의 패턴(Page) 및 설명은 http://zvon.org/comp/r/tut-Regexp.html#Pages~Contents 를 참고했습니다.
정규표현식 패턴들
Page 11
Quantifier에 대해 알아봅시다. Quantifier를 우리말로 하면 수량자라는 뜻입니다.
수량자는 어떠한 패턴이 얼마나 등장하는 가, 숫자를 나타냅니다.
수량자는 크게 *, +, ? 로 세가지가 있습니다.
* : 0개~여러개
+ : 1개~여러개
? : 0개~1개
Source : aabc abc bc
Case1
Regular Expression | a*b |
First match | aabc abc bc |
All match | aabc abc bc |
a*b 는 b 앞의 a가 0개~여러개를 검출합니다. 따라서 a가 2개인 aab , a가 1개인 ab, a가 0개인 b 모두 검출됩니다.
Case2
Regular Expression | a+b |
First match | aabc abc bc |
All match | aabc abc bc |
a+b 는 b 앞의 a가 1개~여러개를 검출합니다. 따라서 a가 2개인 aab , a가 1개인 ab가 검출됩니다. bc는 a가 없으니 검출되지않습니다.
Case3
Regular Expression | a?b |
First match | aabc abc bc |
All match | aabc abc bc |
a?b 는 b 앞의 a가 0개~1개를 검출합니다. 따라서 a가 1개인 ab, a가 0개인 b가 검출됩니다. aabc는 a가 두개이므로 앞에 있는 a를 제외하고 ab가 검출됩니다.
Page 12
12 페이지에선, *와 함께 기호를 쓰는 특수한 경우를 예시를 통해 알아봅시다.
Source : -@- *** -- "*" -- *** -@-
Case1
Regular Expression | .* |
First match | -@- *** -- "*" -- *** -@- |
All match | -@- *** -- "*" -- *** -@- |
*은 * 앞의 문자를 0개~여러개를 함께 검출하고, .은 모든 특성을 포함하기때문에 .*은 모두 검출합니다.
Case2
Regular Expression | -A*- |
First match | -@- *** -- "*" -- *** -@- |
All match | -@- *** -- "*" -- *** -@- |
-A*-는 -와 - 사이에 A가 0개~여러개가 포함되는 것을 검출합니다. 따라서 --는 -와 -사이에 A가 0개이므로 검출되고
-@-는 -와 -사이에 A가 아닌 @가 포함돼기에 검출되지않습니다.
Case3
Regular Expression | [-@]* |
First match | -@- *** -- "*" -- *** -@- |
All match | -@- *** -- "*" -- *** -@- |
[-@]*는 대괄호 안의 -와 @가 둘 중 하나가 있는 것을 검출하고, [-@]*은 [-@]가 하나의 문자로 [-@]가 0개~여러개를 검출합니다.
따라서 위와 같이 검출합니다.
Page 13
13 페이지에선, +와 함께 기호를 쓰는 특수한 경우를 예시를 통해 알아봅시다.
Source : -@@@- * ** - - "*" -- * ** -@@@-
Case1
Regular Expression | \*+ |
First match | -@@@- * ** - - "*" -- * ** -@@@- |
All match | -@@@- * ** - - "*" -- * ** -@@@- |
\*+ 는 \를 통해 문자 *를 검출하고, +를 통해 문자 *를 1개~여러개 검출합니다
Case2
Regular Expression | -@+- |
First match | -@@@- * ** - - "*" -- * ** -@@@- |
All match | -@@@- * ** - - "*" -- * ** -@@@- |
-@+- 는 -와 -사이에 @가 1개 이상을 검출합니다. 따라서 -@@@-를 검출합니다.
Case3
Regular Expression | [^ ]+ |
First match | -@@@- * ** - - "*" -- * ** -@@@- |
All match | -@@@- * ** - - "*" -- * ** -@@@- |
[^ ]+ 에서 [^ ]는 ^가 공백을 부정하므로 공백이 아닌 텍스트 전부를 검출합니다.
Page 14
14 페이지에선, ?와 함께 기호를 쓰는 특수한 경우를 예시를 통해 알아봅시다.
Source : --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
Case1
Regular Expression | -X?XX?X |
First match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
All match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
-X?XX?X 는 - 뒤에 XX를 포함하고 XX 앞, 뒤로 X가 0개 또는 1개를 검출합니다.
검출할 수 있는 텍스트로는 -XX,-XXX,-XXXX가 있습니다.
따라서 -XX는 XX만 포함하고 앞 뒤로 X가 0개이므로 검출합니다.
Case2
Regular Expression | -@?@?@?- |
First match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
All match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
-@?@?@?- 는 -와 - 사이에 @가 0개 또는 1개를 검출합니다. 같은 패턴이 3개있으므로,
따라서 검출할 수 있는 텍스트로는 --, -@-, -@@-, -@@@- 가 있습니다.
Case3
Regular Expression | [^@]@?@ |
First match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
All match | --XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@- |
[^@]@?@는 [^@]는 @가 아닌 것이고, @?는 @ 0개 또는 1개를 검출합니다.
-@는 -가 @ 아닌 것이고, @?가 0개를 나타내고, 뒤 @가 붙은 것이기때문에 검출합니다.
Page 15
15 페이지에선, 수량을 정확하게 설정하는 수량자를 알아봅시다.
정확한 수량을 설정하는 수량자는 기호 { }를 사용합니다.
예시를 통해 알아봅시다.
Source : One ring to bring them all and in the darkness bind them
Case1
Regular Expression | .{5} |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
.{5}는 5개의 문자를 검출합니다. 따라서 First match에서 One r 을 검출하고One r/ing t/o bri/ng th/em al/l and/ in t/he da/rknes/s bin/d the///m이므로 마지막 m을 제외하고 검출합니다.
Case2
Regular Expression | [els]{1,3} |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
[els]{1,3}은 e,l,s을 검출하돼 길이가 1이상 3이하를 검출합니다.
Case3
Regular Expression | [a-z]{3,} |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
[a-z]{3,}는 소문자로 시작하는 것 중 길이가 3이상인 것을 검출합니다.
따라서 One 은 대문자로 시작하기 때문에, to와 in은 길이가 2이기때문에 검출하지않습니다.
Page 16
16 페이지에선 앞서 배운 *, +, ? 을 중괄호로 표현해봅시다.
+는 0이상이기때문에, {0,}와 같습니다.
*는 1이상이기때문에, {1,}와 같습니다.
?는 0또는 1이기때문에, {0,1}와 같습니다.
Page 17
17 페이지에선 수량자 뒤에 ?가 들어갔을때를 알아봅시다.
예시를 통해 알아봅시다.
Source : One ring to bring them all and in the darkness bind them
Case1
Regular Expression | r.* |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
r.*는 앞서봤던 것 처럼 r뒤에 모든 속성과 상관없이( . ) 길이가 0이상인 것을 검출합니다. 따라서 r로 시작해 문장 끝에서 끝납니다.
Case2
Regular Expression | r.*? |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
그러나 *뒤에 ?가 붙으면 이는 0을 나타냅니다. 따라서 r만을 검출합니다.
Case3
Regular Expression | r.+ |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
r.+ 는 r뒤에 모든 속성인 길이가 1이상을 검출합니다. 따라서 r부터 문장끝까지 검출합니다.
Case4
Regular Expression | r.+? |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
그러나 +뒤에 ?가 붙으면 이는 1을 나타냅니다. 따라서 r뒤에 문자 하나만을 붙여 검출합니다.
Case5
Regular Expression | r.? |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
r.?는 r은 r뒤에 모든 속성인 길이가 0또는 1일 검출합니다. 따라서 ri, rk를 검출합니다.
Case6
Regular Expression | r.?? |
First match | One ring to bring them all and in the darkness bind them |
All match | One ring to bring them all and in the darkness bind them |
그러나 ?뒤에 ?가 있으면 이는 0을 나타냅니다. 따라서 r만을 검출합니다.
수량자 뒤에 ?가 붙으면 이는 공통적으로 원래 수량자가 택할 수 있는 수량 중 최소를 택합니다.
이처럼 하는 이유를 알아봅시다.
위처럼 div를 택할때 .+의 기호를 택한다면 <div>와 </div>안의 하나 이상을 택하는 것인데,
<div>text</div>를 택하는 것이 아닌, text의 <div>와 text2의 </div>를 택하여 통으로 검출합니다.
이를 탐욕적인 수량자(Greedy Quantifier)라고 합니다.
이를 앞의 <div>text</div>만을 택하여 검출을 하기위해선,
앞서 했던것처럼 .+?를 한다면 하나씩 체크할 수 있습니다.
이를 게으른 수량자(Lazy Quantifier)라고 합니다.
출처
'언어 > 정규표현식(Regular Expression)' 카테고리의 다른 글
정규표현식(Regular Expression)에 대하여 - 경계와 전방/후방 탐색 (18~25) (0) | 2021.10.07 |
---|---|
정규표현식(Regular Expression)에 대하여 - 문자그룹, 특정문자와 범위, 서브패턴 (5~10) (0) | 2021.10.07 |
정규표현식(Regular Expression)에 대하여 - 앵커와 이스케이핑(3~4) (0) | 2021.10.07 |
정규표현식 (Regular Expression)에 대하여 - 정의와 기본 패턴(1~2) (0) | 2021.10.07 |