이번애는 ^ 와 $ 와 \ 라는, 정규표현식에서 특수한 의미를 가진 기호의 사용에 대해서 알아보자.
page3을 살펴보자.
정규표현식을 입력할 때 ^(캐럿), $(달러)는 특별한 의미를 가지고 있다.
다음과 같은 소스가 있다고 했을 때,
소스: who is who
정규표현식으로 ^who 라고 입력하면 결과는
First match:who is who
All matches:who is who
이다. who is whoi라는 소스에는 who가 두번나온다.
^(캐럿)은 문자가 시작하는 위치를 맨 앞으로 지정하는 것이다.
그렇다면 정규표현식으로 who$라고 입력해보자. 결과는
First match:who is who
All matches:who is who
이다. $는 문자가 끝나는 위치를 맨 뒤로 지정하는 것이다.
[나중에 풀어봐야 할 궁금증 메모]
1. 라인의 끝, 앞이라는 것의 기준은?
2. 맨앞, 맨뒤를 의미하는 것인가? 그렇다면 hello who is 라는 소스가 있을 땐 who를 찾지 않겠네?
라고 적어놓고 넘어가려는데 다음 페이지에 답이 나온다.
page4를 살펴보자.
이번 소스는 좀 복잡하게 나와있다.
Source
$12$ \-\ $25$ |
기억해야 할 것은 page3에서 $는 정규표현식 패턴상에서 문자가 끝나는 위치를 지정하는 특수한 기호였다.
소스를 그대로 가져왔다..
Case 1
Regular Expression: | ^$ |
---|---|
First match: | $12$ \-\ $25$ |
All matches: | $12$ \-\ $25$ |
정규표현식이 ^$ 라고 나와있다. 둘다 page3에서 특수한 의미를 가진 기호로 사용됐었다.
의도는 $라고 시작하는 text를 찾겠다는 것인데 아무것도 매치되지 않는다.
작동하지 않는 이유는 뒤에 있는 $가 문자열의 끝을 의미하는 특수한 기호이기 떄문이다.
그렇다면 어떻게 하면 문자 앞에 오는 $를 선택할 수 있을까?
단계적으로 알아보자.
우선 $라는 글자를 찾아보자.
Case 2
Regular Expression: | \$ |
---|---|
First match: | $12$ \-\ $25$ |
All matches: | $12$ \-\ $25$ |
그냥 $라고 입력하면 아무것도 찾아지지 않는다. 특수한 의미를 가진 기호인 $의 성질을 죽여놔야한다.
죽이는 방법은 $앞에 역슬래시 '\'를 입력하는 것이다.
\(escape)는 기호 뒤에따라오는 문자를 정규표현식에서 의미가 있는 문법적 요소가 아닌 단순한 문자로 바꿔주는 역할을 하는것이다.
Case 3
Regular Expression: | ^\$ |
---|---|
First match: | $12$ \-\ $25$ |
All matches: | $12$ \-\ $25$ |
case1의 예제에서 ^$가 먹히지 않았던 이유는 ^와 $둘다 특수한 의미를 가졌기 때문이었다.
우리는 맨 앞에 오는 $를 찾고 싶을 뿐이고, 따라서 맨 앞이라는 ^(캐럿)은 특수한 의미를 지니고 있어야 하며 $는 특수 의미 없이 문자 그대로 읽혀야 한다. 따라서 ^는 살리고 $는 죽인다. ^\$라고 표현할 경우, ^의미는 살아있되, $의 특수 의미는 사라진다.
따라서 맨 앞에 오는 $를 찾을 수 있는 것이다.
이를 응용해보자. 그럼 맨 뒤에 오는 $는 어떻게 찾지?
Case 4
Regular Expression: | \$$ |
---|---|
First match: | $12$ \-\ $25$ |
All matches: | $12$ \-\ $25$ |
우선 그냥 아무것도 고려하지 않고 정규표현식을 작성해본다면 $$이다. 문자열의 끝에서 $를 찾아라 라는 뜻이다. 하지만
$랑 $둘다 특수한 의미를 가진다. 맨 앞에 달러는 특수한 의미가 있어선 안되고, 그냥 문자 그대로의 $가 되어야 한다.
따라서 맨 앞에는 죽이고 뒤에는 살린다. 즉 \$$로 입력하면, 앞의 $는 문자 그대로의 $가 되고, 뒤의 $는 문자열의 맨 끝에서 찾으라는
특수한 의미가 붙게 되는 것이다.
마지막으로 그럼 정규표현식에 들어간 역슬래시는 어떻게 찾을까?
Case 5
Regular Expression: | \\ |
---|---|
First match: | $12$ \-\ $25$ |
All matches: | $12$ \-\ $25$ |
같은 원리이다. \를 입력할 경우 얘는 특수한 의미를 가진 애이기 때문에 문자 그대로 인식하게 해야한다.
따라서 \\를 입력하면 앞의 \는 뒤에 오는 문자를 문자 그대로 인식하게 하라는 의미이기 때문에
뒤에 \는 문자 그대로의 \가 되고
따라서 source안에 오는 \를 찾을 수 있게 되는 것이다.
'IT 인터넷 > 정규표현식' 카테고리의 다른 글
[정규표현식] 수량자 (0) | 2018.06.26 |
---|---|
[정규표현식] 특정 문자와 범위 (0) | 2018.06.26 |
[정규표현식] 특정 문자와 범위 (0) | 2018.06.26 |
[정규표현식] 모든 문자 그룹 (0) | 2018.06.20 |
[정규표현식] 패턴 기본 (0) | 2018.06.20 |