정규표현식 012. 검색할 위치 1

조회 수 9501 추천 수 0 2012.01.13 13:46:31

앞서 캐럿(^)의 사용법에 대해 설명드렸습니다. ‘그런 것도 있었나?’ 하시는 분들, 없으시겠지만 혹시 몰라서 리뷰해 드립니다.

 

정규식에서 캐럿이 일반문자가 아닌, 즉 메타문자로 쓰일 때는 두 가지 의미를 갖습니다. 하나는 특정 문자집합을 제외한다는 것이고 다른 하나는 문자열의 가장 앞이라는 의미입니다. 이중 두 번째 용법이 바로 검색할 위치에 관계된 것입니다. 가령,

 

abc acc adc aec

 

^[a].+?[c]

 

위의 문자열을 대상으로 아래 정규식을 적용하면 맨 앞의 abc만 매치됩니다. 이 정규식에서 캐럿을 빼면 당연히 abc, acc, adc, aec가 모두 매치됩니다. 이처럼 정규식에서는 검색할 위치 지정을 가능케 하는 방법이 몇 가지 있습니다.

 

문자열의 처음을 지정하는 방법이 있다면 문자열의 끝을 지정하는 방법도 있지 않겠어?” 와우, 역시 머니북 사용자이십니다. 당연히 있습니다. 달러 표시($) 메타문자가 그것입니다. 예를 보겠습니다.

 

[a].+?[c]$

 

위와 똑같은 정규식인데 캐럿이 사라지고 대신 맨 뒤에 달러 표시가 붙었습니다. 이렇게 하면 문자열에서 맨 뒤에 있는 aec만 매치됩니다.

 

위치 지정에서 빠질 수 없는 것이 있습니다. 바로 단어 경계입니다. 역시 예를 보겠습니다.

 

america erica pericana

 

위의 문자열에서 erica를 검색한다고 하면 두 번째 문자열만 매치될까요? 아닙니다. erica가 들어 있는 다른 문자열들도 매치됩니다. 따라서 위의 3개 단어 모두 매치됩니다.

 

단어 경계라는 것은 이런 경우를 위해 태어났습니다. 여기서 경계는 주로 공백을 의미합니다. 단어와 단어를 구분하는 기준이 주로 공백이니까요. 이 공백은 말 그대로의 공백, 즉 스페이스 바를 쳤을 때 찍히는(눈에는 안 보이죠?) 글자와 탭, 줄바꿈문자 등을 모두 포함합니다. 즉 공백 문자입니다. 따라서 찾고자 하는 단어가 한 줄의 맨 끝에 위치하고 있어도 당연히 매치가 됩니다. \b가 실제의 공백을 가리키는 게 아니라 단어 단위로 찾기 위한 기호라는 걸 아셔야 합니다. 이러한 사실은 검색 결과를 봐도 알 수 있습니다. 단어의 앞뒤에 있는 공백은 검색 결과에서 빠지거든요.

 

이 단어 경계를 가리키는 메타문자는 \b입니다. 위의 문자열에서 정확히 erica만 검색하고 싶다면 다음과 같이 해야 합니다.

 

\berica\b

 

만약 앞의 \b를 빼면 america도 같이 검색됩니다. 문자열의 뒷 부분만 단어 경계를 지정한 것이니까요. 검색 위치에 관한 것은 양이 좀 많으니까 오늘은 이만 줄입니다.

 

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
29 정규표현식 019. IP 주소 유효성 검사 1 마라톤맨 2012-02-02 98677
28 정규표현식 023. 정규식의 옵션과 여러 정규식 엔진들 마라톤맨 2012-02-15 68840
27 정규표현식 025. 자바스크립트의 정규식 1 마라톤맨 2012-02-22 31754
26 정규표현식 022. 드라이브명과 디렉토리, 파일명 분리 2 마라톤맨 2012-02-13 23882
25 정규표현식 011. 검색 문자 개수 지정하기 머니북 2012-01-12 21484
24 정규표현식 029. 자바스크립트의 정규식 5 마라톤맨 2012-03-28 15652
23 정규표현식 021. 드라이브명과 디렉토리, 파일명 분리 1 마라톤맨 2012-02-08 13653
22 정규표현식 010. 웹 서버 설정에도 필요 머니북 2012-01-11 13413
21 정규표현식 014. 최대 매치와 최소 매치 1 마라톤맨 2012-01-18 12622
20 정규표현식 007. 메타문자 2 마라톤맨 2012-01-08 12455
19 정규표현식 026. 자바스크립트의 정규식 2 마라톤맨 2012-02-27 11165
18 정규표현식 020. IP 주소 유효성 검사 2 마라톤맨 2012-02-06 10849
17 정규표현식 016. 하위 표현식 1 마라톤맨 2012-01-25 10303
16 정규표현식 024. 숙제와 답 마라톤맨 2012-02-17 10174
15 정규표현식 018. 하위 표현식 3 마라톤맨 2012-01-30 10118
» 정규표현식 012. 검색할 위치 1 마라톤맨 2012-01-13 9501
13 정규표현식 027. 자바스크립트의 정규식 3 마라톤맨 2012-03-02 9434
12 정규표현식 028. 자바스크립트의 정규식 4 마라톤맨 2012-03-09 9238
11 정규표현식 015. 최대 매치와 최소 매치 2 마라톤맨 2012-01-20 9201
10 정규표현식 013. 검색할 위치 2 마라톤맨 2012-01-16 9080