2017-10-22 5 views
0

정규식을 사용하여 파일에서 읽는 텍스트의 특정 단어가 유효한지 유효하지 않은지 확인하는 C 프로그램을 작성하고 있습니다. 정규식 검사를 수행하는 코드가 첨부되었습니다. 온라인 정규식 검사기를 사용하여 정규식이 맞다고 말합니다. 왜 내가 틀렸을 지 모르겠습니다.
정규 표현식은 AB1234 또는 ABC1234 ABCD1234 형식의 문자열을 허용해야합니다. 당신은 regex.h에서 POSIX regular expressions을 사용하는정규식이 올바른 솔루션을 반환하지 않습니다.

//compile the regular expression 
reti1 = regcomp(&regex1, "[A-Z]{2,4}\\d{4}", 0); 
// does the actual regex test 
status = regexec(&regex1,inputString,(size_t)0,NULL,0); 

if (status==0) 
    printf("Matched (0 => Yes): %d\n\n",status); 
else 
    printf(">>>NO MATCH<< \n\n"); 
+1

정확하게 "잘못"입니까? 예기치 않은 결과를주는 예제 입력을 제공하십시오. – aschepler

+1

또한 문제를 설명하는 [짧지 만 완전한 프로그램] (https://stackoverflow.com/help/mcve)을 만들 수 있습니까? @aschepler가 언급했듯이, 예기치 않은 결과를주는 적어도 하나의 예제 입력을 코드에 포함시켜야하지만, 그 외에도 이미'main()'함수를 가지고있는 코드보다 훨씬 더 많이 가질 필요는 없습니다 . –

+1

POSIX regex 구현 (regex.h)을 사용하고 있지만 지원되지 않는 PCRE 스타일 정규 표현식을 전달하는 것처럼 보입니다. –

답변

1

. 이것들은 사용하고있는 구문 인 PCRE 형식을 지원하지 않으며 요즘은 훨씬 더 일반적입니다. PCRE 지원을 제공하는 라이브러리를 사용하는 것이 좋습니다. 당신이 POSIX 식을 사용해야하는 경우, 나는이 일을 생각 :

#include <regex.h> 
#include "stdio.h" 
int main(void) { 
    int status; 
    int reti1; 
    regex_t regex1; 
    char * inputString = "ABCD1234"; 

    //compile the regular expression 
    reti1 = regcomp(&regex1, "^[[:upper:]]{2,4}[[:digit:]]{4}$", REG_EXTENDED); 
    // does the actual regex test 
    status = regexec(&regex1,inputString,(size_t)0,NULL,0); 

    if (status==0) 
     printf("Matched (0 => Yes): %d\n\n",status); 
    else 
     printf(">>>NO MATCH<< \n\n"); 

    regfree (&regex1); 
    return 0; 
} 

이 (내 C 매우 녹슨, 그래서이 코드는 아마 끔찍합니다.)

내가 this 대답에 좋은 자원을 발견 .

관련 문제