앵커
업데이트: 2007년 11월
이 단원에 있는 이전 항목의 예제에서는 장 제목을 찾는 데만 중점을 두었습니다. Chapter 문자열 뒤에 공백 하나와 숫자가 나타나는 값은 실제 장 제목이 될 수도 있지만 다른 장에 대한 상호 참조가 될 수도 있습니다. 실제 장 제목은 항상 줄의 시작 부분에 나타나므로 상호 참조가 아닌 제목만 찾을 수 있는 방법이 필요합니다.
앵커의 작동 방식
앵커는 그러한 기능을 제공합니다. 앵커를 사용하면 줄의 시작 부분이나 끝 부분 중 한 곳에 정규식을 고정할 수 있습니다. 단어의 시작 부분이나 끝 부분에서 단어 내에서 사용하는 정규식을 만들 수도 있습니다. 다음 표에는 정규식 앵커와 그 의미에 대한 목록이 들어 있습니다.
문자 |
설명 |
---|---|
^ |
입력 문자열의 시작 부분에서 위치를 찾습니다. RegExp 개체의 Multiline 속성이 설정되어 있으면 ^에서는 \n이나 \r 다음의 위치도 찾습니다. |
$ |
입력 문자열의 끝 부분에서 위치를 찾습니다. RegExp 개체의 Multiline 속성이 설정되어 있으면 $는 \n이나 \r 앞의 위치도 찾습니다. |
\b |
단어 경계, 즉 단어와 공백 사이의 위치를 찾습니다. |
\B |
비단어 경계를 찾습니다. |
앵커와 함께 수량자를 사용할 수는 없습니다. 줄 바꿈이나 단어 경계의 바로 앞이나 뒤에서 두 개 이상의 위치를 가질 수 없으므로 ^*와 같은 식은 허용되지 않습니다.
텍스트 줄의 시작 부분에서 텍스트를 찾으려면 정규 식의 시작 부분에서 ^ 문자를 사용합니다. 이러한 ^의 사용을 대괄호로 묶은 식 내에서의 사용과 혼동하지 마십시오.
텍스트 줄의 끝 부분에서 텍스트를 찾으려면 정규 식의 끝 부분에서 $ 문자를 사용합니다.
장 제목을 검색할 때 앵커를 사용하면 다음 정규식에서는 두 자리 숫자만 오고 줄의 시작 부분에서 사용하는 장 제목을 찾습니다.
/^Chapter [1-9][0-9]{0,1}/
실제 장 제목이 줄의 시작 부분에서 사용하고 해당 줄에 있는 유일한 텍스트가 됩니다. 또한 줄의 시작 부분에서 사용하고 같은 줄의 끝 부분에서 사용하기도 합니다. 다음 식에서는 지정한 일치에서 장 제목만 찾고 상호 참조는 찾지 않습니다. 시작 부분에서 그리고 텍스트의 줄 끝 부분에서만 찾는 정규식을 만들어 장 제목만 찾을 수 있게 됩니다.
/^Chapter [1-9][0-9]{0,1}$/
단어 경계를 찾는 것은 다소 다르지만 정규식에 중요한 기능을 추가합니다. 단어 경계는 단어와 공백 사이의 위치입니다. 비단어 경계는 그 이외의 위치입니다. 다음 식에서는 Chapter 단어의 첫 세 글자가 단어 경계 다음에 나타나기 때문에 이 문자를 찾습니다.
/\bCha/
\b 연산자의 위치는 중요합니다. 이 연산자가 찾아야 할 문자열의 시작 부분에 있으면 단어의 시작 부분에서 일치 항목을 찾고 문자열의 끝 부분에 있으면 단어의 끝 부분에서 일치 항목을 찾습니다. 예를 들어, 다음 식에서는 Chapter 단어에서 ter 문자열이 단어 경계 앞에 나타나므로 ter 문자열을 찾습니다.
/ter\b/
다음 식에서는 Chapter에서 사용하는 apt 문자열은 찾지만 aptitude에서는 찾지 않습니다.
/\Bapt/
apt 문자열은 Chapter 단어의 비단어 경계에서 사용하고, aptitude 단어의 경우 단어 경계에서 사용합니다. \B 비단어 경계 연산자의 경우 일치 항목이 단어의 시작 부분이나 끝 부분에 있는지에 상관없으므로 위치는 중요하지 않습니다.