2010-12-28 3 views
1

일부 유효성 검사를 수행하기 위해 CAtlRegExp를 사용하는 코드가 있습니다. 특별한 경우 우편 번호 (5 또는 5-4 형식). 또한 데이터가 정확히 같기 때문에 앵커 (^ 및 $)를 사용하고 있습니다. 앵커리스 식을 사용하면 Match 호출이 성공합니다. 앵커를 추가하면 정확히 동일한 데이터로 일치 호출이 실패합니다.CAtlRegExp 표현식 문제 시작/끝 앵커

아래의 코드는 실패한 경우의 코드에 제공된 값을 사용하여 수행하고있는 작업입니다. 정규 표현식 마법사가 아니라는 것을 인정 하겠지만 RegEx Buddy는 코드 에서처럼 형식 표현식에 만족합니다.

도움을 주시면 감사하겠습니다. 그리고 무엇이라도 놓친다면 알려주세요.

감사합니다.

sData = "12345-1234"; 
m_FormatExpression = "^(\\d{5})(-(\\d{4}))?$"; 

CAtlRegExp<> regex; 
REParseError status = regex.Parse(m_FormatExpression); 

if(REPARSE_ERROR_OK == status) 
{ 
    CAtlREMatchContext<> match; 
    if(regex.Match(sData, &match)) 
    { 
     result = true; 
    } 
} 

답변

1

편집 : 나는이 문제를 알아 냈어 때은 완전히 내 대답을 바 꾸었습니다.

클래스는 중괄호로 반복 횟수를 지원하지 않습니다 {}; 일치하는 개체를 반환하는 데 사용합니다. 식의 54은 일치해야하는 문자입니다. 4이있는 부분은 선택 사항이지만 테스트 한 문자열에는 5이 포함되어있는 것은 단지 우연의 일치입니다. 이 표현은 완벽하게 작동합니다.

m_FormatExpression = "^\\d\\d\\d\\d\\d(-\\d\\d\\d\\d)?$"; 
+0

팁 주셔서 감사합니다. 아아, 아무것도 아녜요. 앵커를 추가하면 일치하지 않습니다. 나는 꽤 많은 순열을 시도했지만, 아무 소용이 없다. 흥미로운 점은 "^. * $"이 (가) 무엇이든 일치한다는 것입니다. – DevSolo

+0

@DevSolo, 새롭고 완전히 다른 대답. 당신은 당신이 그것을 볼 때 당신의 이마를 때려 눕힐 것입니다. –

+0

노력에 감사하지만, 아침마다 싸운 후에, 나는 부스트로 전환했다. 이것들은 커스텀 검증을위한 것이며 정규 표현식을 버그로 보이는 것으로 바꾸기 위해 스위치해야하는 것은 받아 들일 수 없다. 응답이기 때문에 신용도를 부여합니다. 다시 한 번 감사드립니다. – DevSolo