관심 단어의 숫자 매칭 규칙

정규식(regex) 관련 버그인 것 같은데, 이런 버그는 해결하기가 항상 좀 까다롭죠. @zogstrip 이 영역에서 최근 작업을 하셨으니 한번 봐주실 수 있을까요? (다만 이 문제는 꽤 오래전부터 있었던 것 같습니다.)

제 이해를 정리해 보면 다음과 같습니다…

단어를 검사할 때는 세 가지 세그먼트가 일치해야 합니다: 앞부분(leading), 단어 자체, 뒷부분(trailing). 우리는 앞부분과 뒷부분을 '문자가 아닌 문자(non-letter characters)'로 설정해 두었습니다… 여기에는 구두점, 공백, 또는 숫자가 포함될 수 있습니다. 여기서 매칭을 어긋나게 만드는 것이 바로 숫자입니다. 원래 의도는 단어 앞뒤에 구두점이나 다른 문자가 있더라도 단어를 포착할 수 있도록 하려는 것이었습니다.

즉, 정규식은 123Test를 보고 Test를 찾은 뒤, 그 앞을 보면 3을 발견합니다. 3은 '문자가 아닌 문자’로 매칭되므로, 그 뒤를 보면 단어의 끝을 찾게 됩니다. 그래서 3Test가 매칭되는 것입니다.

이 문제를 피하려면 앞부분/뒷부분 세그먼트에서 '문자가 아닌 문자’일 뿐만 아니라 '숫자가 아닌 문자(non-number)'도 확인해야 한다고 생각합니다. 숫자를 포함하지 않은 데에 특별한 이유가 있는지, 아니면 단순히 실수였는지는 잘 모르겠습니다.

2개의 좋아요