일치가 성공하면, 일치된 단어 바로 앞에 있는 숫자는 일치 결과에 포함되며, 이는 Unicode 문자에도 해당됩니다.
일치된 단어 바로 뒤에 있는 숫자는 이러한 동작을 보이지 않습니다.
이것은 숫자 일치에도 영향을 미치며, 문자열이 영문자와 숫자로만 구성된 경우에도 마찬가지입니다. 예를 들어, "Test123"는 "Test"만 일치할 수 있고, "123"나 “Test123”(자기 자신)은 일치할 수 없습니다.
제가 이 맥락을 놓치고 있는 것 같습니다—이것은 어떤 종류의 일치 규칙인가요? 누군가 설명해 주실 수 있을까요?
정규식(regex) 관련 버그인 것 같은데, 이런 버그는 해결하기가 항상 좀 까다롭죠. @zogstrip 이 영역에서 최근 작업을 하셨으니 한번 봐주실 수 있을까요? (다만 이 문제는 꽤 오래전부터 있었던 것 같습니다.)
제 이해를 정리해 보면 다음과 같습니다…
단어를 검사할 때는 세 가지 세그먼트가 일치해야 합니다: 앞부분(leading), 단어 자체, 뒷부분(trailing). 우리는 앞부분과 뒷부분을 '문자가 아닌 문자(non-letter characters)'로 설정해 두었습니다… 여기에는 구두점, 공백, 또는 숫자가 포함될 수 있습니다. 여기서 매칭을 어긋나게 만드는 것이 바로 숫자입니다. 원래 의도는 단어 앞뒤에 구두점이나 다른 문자가 있더라도 단어를 포착할 수 있도록 하려는 것이었습니다.
즉, 정규식은 123Test를 보고 Test를 찾은 뒤, 그 앞을 보면 3을 발견합니다. 3은 '문자가 아닌 문자’로 매칭되므로, 그 뒤를 보면 단어의 끝을 찾게 됩니다. 그래서 3Test가 매칭되는 것입니다.
이 문제를 피하려면 앞부분/뒷부분 세그먼트에서 '문자가 아닌 문자’일 뿐만 아니라 '숫자가 아닌 문자(non-number)'도 확인해야 한다고 생각합니다. 숫자를 포함하지 않은 데에 특별한 이유가 있는지, 아니면 단순히 실수였는지는 잘 모르겠습니다.