대개의 이스케이프 문자열 메타문자가 그렇듯이 단어경계에도 반대되는 기호가 존재합니다. 물론 소문자를 대문자로 바꾼 것입니다. \B가 그것으로 의미 또한 반대입니다. 가령,
\Berica\B
위의 정규식으로 검색하면 어떻게 될까요? 이번에는 pericana만 매치됩니다. 즉 다른 단어의 사이에 끼여 있는 문자열을 찾게 됩니다.
그런데 단어경계를 쓸 때 주의하셔야 할 게 하나 있습니다. 원래 단어라는 게 주로 영문자로 이루어져 있잖아요? 그래서 그런지 영문자(숫자도 포함)와 그밖의 문자에 대해 작동하는 방식이 다릅니다. 이게 무슨 말이냐구요? 예를 볼게요.
Bach ? Goldberg Variations
Villa-Lobos ? Prelude no.1
위의 문자열에서 하이픈을 찾으려면 어떻게 해야 할까요?
“그냥 찾으면 되지 않나?”
맞습니다. T_T 하지만 하이픈의 쓰임새가 좀 다르죠? Villa-Lobos는 이 자체로 사람 이름입니다. 이처럼 하이픈을 포함하는 사람 이름이 좀 있죠. 유명한 작곡가 Saint-Saens이라든가 Castelnuovo-Tedesco 같은 사람들이요.
아무튼 사람 이름 사이에 들어 있는 하이픈 외의 다른 하이픈들은 각 컬럼들을 구분하기 위한 용도로 쓰이고 있습니다. 따라서 어느 하이픈을 찾느냐에 따라 검색식이 달라집니다. 컬럼 구분용으로 쓰인 하이픈을 찾아볼까요?
“그렇다면 쉽지. 단어로 쓰인 글자를 검색할 때는 \b로 찾는다며?”
그럴 것 같죠? 이런 식으로요.
\b-\b
그런데 위의 정규식으로 찾으면 Villa-Lobos가 매치됩니다. 좀 이상하죠? 당연히 반대여야 할 것 같은데요. 하지만 단어경계라는 차원에서 다시 한번 곰곰이 생각해 보면 이게 실은 맞는 결과입니다. 하이픈이 단어 안에서 사용되는 경우라면 앞뒤로 공백이 없어야 할테니까요. 에구, 좀 혼동되시죠? 실은 저도 헷갈렸답니다. 하지만 어쩌겠습니가. 정규식을 설계한 사람이 이렇게 만들어 놓은 걸요.
아, 참 정규식을 설계한 사람이 누구인지 아십니까? 저도 모르죠. 퍽~ 에구, 맞아도 할 말 없습니다만 오늘날 널리 쓰이는 정규식은 주로 펄에 뿌리를 두고 있다고 합니다. 말하자면 펄이 정규식의 뿌리가 된 셈이죠.