|
16 | 16 |
|
17 | 17 | > 정규표현식은 텍스트에서 특정 패턴을 찾아내는데 사용되는 문자 혹은 기호들의 집합이다.
|
18 | 18 |
|
19 |
| -정규표현식(Regular expression)은 대상 문자열에 왼쪽에서 오른쪽 방향으로 매칭되는 하나의 패턴이다. "Regular expression"이라고 매번 발음하기 어렵기 때문에, 보통 약어로 "regex" 혹은 "regexp"로 축약되어 사용된다. 정규 표현식은 문자열 내부의 텍스트 대체, 포맷의 유효성 검사, 패턴 매칭을 기반으로한 문자열에서 일부 텍스트를 추출, 그리고 그 외에 다양한 목적을 위해 사용된다. |
| 19 | +정규표현식(Regular expression)은 대상 문자열에 왼쪽에서 오른쪽 방향으로 매칭되는 하나의 패턴이다. "Regular expression"이라고 매번 발음하기 어렵기 때문에, 보통 약어로 "regex" 혹은 "regexp", "정규식"로 축약되어 사용된다. 정규 표현식은 문자열 내부의 텍스트 대체, 포맷의 유효성 검사, 패턴 매칭을 기반으로한 문자열에서 일부 텍스트를 추출, 그리고 그 외에 다양한 목적을 위해 사용된다. |
20 | 20 |
|
21 | 21 | 당신이 하나의 어플리케이션을 작성하고 있고 사용자가 사용자명을 선택할 때 사용되는 규칙들을 정하고 싶다고 상상해보자. 예를 들어, 우리는 사용자명에 문자, 숫자, 밑줄 문자(\_), 그리고 하이픈이 포함되는것은 허용하고 싶다. 또한, 사용자명의 글자수를 제한해서 사용자명이 지저분해보이지 않도록 하고 싶다. 이때 아래 정규표현식을 사용해 입력된 사용자명이 해당 규칙에 맞는지 검사할 수 있다.
|
22 | 22 |
|
|
47 | 47 | - [캐럿 부호](#281-캐럿-부호)
|
48 | 48 | - [달러 부호](#282-달러-부호)
|
49 | 49 | - [단축형 문자열 집합](#3-단축형-문자열-집합)
|
50 |
| -- [룩어라운드](#4-룩어라운드) |
51 |
| - - [긍정형 룩어헤드](#41-긍정형-룩어헤드) |
52 |
| - - [부정형 룩어헤드](#42-부정형-룩어헤드) |
53 |
| - - [긍정형 룩비하인드](#43-긍정형-룩비하인드) |
54 |
| - - [부정형 룩비하인드](#44-부정형-룩비하인드) |
| 50 | +- [전후방탐색](#4-전후방탐색) |
| 51 | + - [긍정형 전방탐색](#41-긍정형-전방탐색) |
| 52 | + - [부정형 전방탐색](#42-부정형-전방탐색) |
| 53 | + - [긍정형 후방탐색](#43-긍정형-후방탐색) |
| 54 | + - [부정형 후방탐색](#44-부정형-후방탐색) |
55 | 55 | - [플래그](#5-플래그)
|
56 | 56 | - [대소문자 구분없음](#51-대소문자-구분없음)
|
57 | 57 | - [전체 검색](#52-전체-검색)
|
|
285 | 285 | |\s|공백 문자와 매치: `[\t\n\f\r\p{Z}]`|
|
286 | 286 | |\S|공백 문자가 아닌 문자와 매치: `[^\s]`|
|
287 | 287 |
|
288 |
| -## 4. 룩어라운드 |
| 288 | +## 4. 전후방탐색 |
289 | 289 |
|
290 |
| -때때로 룩어라운드라고 알려진 룩비하인드와 룩어헤드는 (패턴 매칭을 위해서 사용되지만 매칭된 리스트에는 포함되지 않는) ***넌-캡쳐링 그룹*** 의 특정 종류들이다. 룩어라운드는 하나의 패턴이 다른 특정 패턴 전이나 후에 나타나는 조건을 가지고 있을때 사용한다. 예를 들어, 우리가 입력 문자열 `$4.44 and $10.88`에 대해서 달러 부호 `$`이후에 나오는 모든 숫자를 매칭시키고 싶다고 하자. 이때 정규 표현식 `(?<=\$0[0-9\.]*`를 사용할 수 있다. 이 정규 표현식은 `$` 문자 뒤에 나오는 문자 `.`을 포함한 모든 숫자 문자를 의미한다. 다음은 정규 표현식에서 사용되는 룩어라운드들이다. |
| 290 | +때때로 전후방탐색(Lookaround)이라고 알려진 후방탐색(Lookbehind)과 전방탐색(Lookahead)은 (패턴 매칭을 위해서 사용되지만 매칭된 리스트에는 포함되지 않는) ***넌-캡쳐링 그룹*** 의 특정 종류들이다. 룩어라운드는 하나의 패턴이 다른 특정 패턴 전이나 후에 나타나는 조건을 가지고 있을때 사용한다. 예를 들어, 우리가 입력 문자열 `$4.44 and $10.88`에 대해서 달러 부호 `$`이후에 나오는 모든 숫자를 매칭시키고 싶다고 하자. 이때 정규 표현식 `(?<=\$0[0-9\.]*`를 사용할 수 있다. 이 정규 표현식은 `$` 문자 뒤에 나오는 문자 `.`을 포함한 모든 숫자 문자를 의미한다. 다음은 정규 표현식에서 사용되는 룩어라운드들이다. |
291 | 291 |
|
292 | 292 | |부호|설명|
|
293 | 293 | |:----:|----|
|
294 |
| -|?=|긍정형 룩어헤드| |
295 |
| -|?!|부정형 룩어헤드| |
296 |
| -|?<=|긍정형 룩비하인드| |
297 |
| -|?<!|부정형 룩비하인드| |
| 294 | +|?=|긍정형 전방탐색| |
| 295 | +|?!|부정형 전방탐색| |
| 296 | +|?<=|긍정형 후방탐색| |
| 297 | +|?<!|부정형 후방탐색| |
298 | 298 |
|
299 |
| -### 4.1 긍정형 룩어헤드 |
| 299 | +### 4.1 긍정형 전방탐색 |
300 | 300 |
|
301 |
| -긍정형 룩어헤드는 표현식의 첫 부분뒤에 룩어헤드 표현식이 뒤따라 나오는지 확인하는데 사용된다. 매칭의 결과값은 표현식의 첫 부분과 매칭된 텍스트만이 포함된다. 긍정형 룩어헤드를 정의하기 위해서는 괄호가 사용된다. 이 괄호 안에서, 물음표 부호 `?`와 등호 `=`가 다음과 같이 사용된다: `(?=...)`. 룩어헤드 표현식은 괄호내부의 등호 `=` 부호 뒤에 쓰면된다. 예를 들어, 정규 표현식 `[T|t]he(?=\sfat)`는 대문자 `T` 혹은 소문자 `t` 뒤에 문자 `h`, 문자 `e`가 나오는 패턴을 의미한다. 괄호안에서 우리는 정규 표현식 엔진에게 바로 뒤에 공백문자와 문자열 `fat`이 나오는 `The` 또는 `the`만 매치하도록 알리는 긍정형 룩어헤드를 정의하였다. |
| 301 | +긍정형 전방탐색는 표현식의 첫 부분뒤에 전방탐색 표현식이 뒤따라 나오는지 확인하는데 사용된다. 매칭의 결과값은 표현식의 첫 부분과 매칭된 텍스트만이 포함된다. 긍정형 전방탐색를 정의하기 위해서는 괄호가 사용된다. 이 괄호 안에서, 물음표 부호 `?`와 등호 `=`가 다음과 같이 사용된다: `(?=...)`. 전방탐색 표현식은 괄호내부의 등호 `=` 부호 뒤에 쓰면된다. 예를 들어, 정규 표현식 `[T|t]he(?=\sfat)`는 대문자 `T` 혹은 소문자 `t` 뒤에 문자 `h`, 문자 `e`가 나오는 패턴을 의미한다. 괄호안에서 우리는 정규 표현식 엔진에게 바로 뒤에 공백문자와 문자열 `fat`이 나오는 `The` 또는 `the`만 매치하도록 알리는 긍정형 전방탐색를 정의하였다. |
302 | 302 |
|
303 | 303 | <pre>
|
304 | 304 | "[T|t]he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
305 | 305 | </pre>
|
306 | 306 |
|
307 | 307 | [Test the regular expression](https://regex101.com/r/IDDARt/1)
|
308 | 308 |
|
309 |
| -### 4.2 부정형 룩어헤드 |
| 309 | +### 4.2 부정형 전방탐색 |
310 | 310 |
|
311 |
| -부정형 룩어헤드는 입력 문자열로부터 특정 패턴이 뒤에 나오지 않기를 바라는 상황에서 사용된다. 부정형 룩어헤드는 우리가 긍정형 룩어헤드를 정의하는 방식과 동일하게 정의된다. 하지만, 유일한 차이점은 등호 부호 `=` 대신 부정 부호 `!` 문자를 사용한다는 것이다, 즉 `(?!...)`. 정규 표현식 `[T|t]he(?!\sfat)`를 살펴보도록 하자. 이 정규 표현식은 공백 문자와 `fat` 문자열이 연속으로 나오지 않는 모든 `The` 혹은 `the` 문자열과 매치된다. |
| 311 | +부정형 전방탐색는 입력 문자열로부터 특정 패턴이 뒤에 나오지 않기를 바라는 상황에서 사용된다. 부정형 전방탐색는 우리가 긍정형 전방탐색를 정의하는 방식과 동일하게 정의된다. 하지만, 유일한 차이점은 등호 부호 `=` 대신 부정 부호 `!` 문자를 사용한다는 것이다, 즉 `(?!...)`. 정규 표현식 `[T|t]he(?!\sfat)`를 살펴보도록 하자. 이 정규 표현식은 공백 문자와 `fat` 문자열이 연속으로 나오지 않는 모든 `The` 혹은 `the` 문자열과 매치된다. |
312 | 312 |
|
313 | 313 | <pre>
|
314 | 314 | "[T|t]he(?!\sfat)" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
315 | 315 | </pre>
|
316 | 316 |
|
317 | 317 | [Test the regular expression](https://regex101.com/r/V32Npg/1)
|
318 | 318 |
|
319 |
| -### 4.3 긍정형 룩비하인드 |
| 319 | +### 4.3 긍정형 후방탐색 |
320 | 320 |
|
321 |
| -긍정형 룩비하인드는 특정 패턴뒤에 나오는 문자열 매치를 가져오기 위해서 사용된다. 긍정형 룩비하인드는 `(?<=...)`로 표시된다. 예를 들어, 정규 표현식 `(?<=[T|t]he\s)(fat|mat)`는 입력 문자열에서 `The` 혹은 `the` 뒤에 공백이 나오고, 그 뒤에 `fat` 또는 `mat`이 나오는 패턴을 의미한다. |
| 321 | +긍정형 후방탐색는 특정 패턴뒤에 나오는 문자열 매치를 가져오기 위해서 사용된다. 긍정형 후방탐색는 `(?<=...)`로 표시된다. 예를 들어, 정규 표현식 `(?<=[T|t]he\s)(fat|mat)`는 입력 문자열에서 `The` 혹은 `the` 뒤에 공백이 나오고, 그 뒤에 `fat` 또는 `mat`이 나오는 패턴을 의미한다. |
322 | 322 |
|
323 | 323 | <pre>
|
324 | 324 | "(?<=[T|t]he\s)(fat|mat)" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the <a href="#learn-regex"><strong>mat</strong></a>.
|
325 | 325 | </pre>
|
326 | 326 |
|
327 | 327 | [Test the regular expression](https://regex101.com/r/avH165/1)
|
328 | 328 |
|
329 |
| -### 4.4 부정형 룩비하인드 |
| 329 | +### 4.4 부정형 후방탐색 |
330 | 330 |
|
331 |
| -부정형 룩비하인드는 특정 패턴이 뒤에 나오지 않기를 바라는 상황에서 사용된다. 부정형 룩비하인드는 `(?<!...)`로 표시된다. 예를 들어, 정규 표현식 `(?<!(T|t)he\s)(cat)`은 앞에 `The ` 혹은 `the `가 위치하지 않는 모든 `cat` 문자열을 의미한다. |
| 331 | +부정형 후방탐색는 특정 패턴이 뒤에 나오지 않기를 바라는 상황에서 사용된다. 부정형 후방탐색는 `(?<!...)`로 표시된다. 예를 들어, 정규 표현식 `(?<!(T|t)he\s)(cat)`은 앞에 `The ` 혹은 `the `가 위치하지 않는 모든 `cat` 문자열을 의미한다. |
332 | 332 |
|
333 | 333 | <pre>
|
334 | 334 | "(?<![T|t]he\s)(cat)" => The cat sat on <a href="#learn-regex"><strong>cat</strong></a>.
|
|
0 commit comments