2014-03-31 2 views
1

이것은 매우 간단해야하지만 C의 regex.h 라이브러리에서 '+'의 기본 작업을 이해하는 데 문제가 있습니다. 무엇이 잘못 될지 확실하지 않습니다.Posix Regex 라이브러리에서 +를 사용하는 경우

작동하지 않는 샘플 코드 붙여 넣기. 나는 B로 시작하고 끝나는 문자열을 찾으려면, 그래서 나는 +

int main(int argc, const char * argv[]) 
{ 
regex_t regex; 
int reti; 

/* Compile regular expression */ 
reti = regcomp(&regex, "^B+A$", 0); 
if(reti) 
{ 
    printf("Could not compile regex\n"); 
    exit(1); 
} 

/* Execute regular expression */ 
reti = regexec(&regex, "BBBA", 0, NULL, 0); 
if (!reti) 
{ 
    printf("Match\n"); 
} 
else if(reti == REG_NOMATCH) 
{ 
    printf("No match\n"); 
} 
else 
{ 
    printf("Regex match failed\n"); 
    exit(1); 
} 

/* Free compiled regular expression if you want to use the regex_t again */ 
regfree(&regex); 
return 0; 
} 

이 경기를 찾을 수없는,하지만 난 할 수없는 나는 B를 사용하려면 B 하나 개 이상의 발생이있을 수 있습니다 이유를 이해하십시오.

^BB * A $의 사용법은 정상적으로 작동하지만, 원하는 것은 아닙니다. BBBA 나 CCCCA 또는 DDDDA와 일치해야하는^[BCD] + A $와 같은 것을 확인하고 싶습니다.^[BCD] [BCD]의 사용 * 원하는 일치하지 않는 BCCCA와 일치 할 수 있으므로 절대로 실망하지 마십시오. 표현식에 괄호와 괄호를 사용하려고했으나 도움이되지 않습니다.

빠른 도움을 주시면 감사하겠습니다.

+0

POSIX regex는 GNU grep이 받아 들일 수 있습니까? 왜냐하면 메타 문자로'+'(또는'?')를 다루지 않기 때문에 백 슬래시로 이스케이프하거나'-E'로 "확장 정규 표현식"을 켜야합니다. –

+0

점프에 감사드립니다. 귀하의 의견과 Alp의 답변을 바탕으로 코드를 수정합니다. – shyam2347

답변

2

기본적으로 regcomp()Basic Regular Expression이라는 패턴을 컴파일합니다. 이러한 정규 표현식에서는 + 연산자를 사용할 수 없습니다. 사용하려는 정규식 구문을 Extended Regular Expression 구문이라고합니다. regcomp()을 더 확장 구문으로 사용하려면 REG_EXTENDED 플래그를 전달해야합니다. 그런데

,이 댓글 :

나는 또한^[BCD] 같은 + BBBA 또는 CCCCA 또는 DDDDA 일치해야합니다 달러 (A $)를 확인하고자한다.^[BCD]의 사용법 [BCD] *와 나를 달러 (A $) 실 거예요 작업은 어떻게 한정사 +* 작품의 오해를 기반으로하는 원하는 경기

하지 않은 BCCCA 일치 할 수있다. 정규 표현식 ^[BCD]+A$^[BCD][BCD]*A$은 정확히 같습니다.

+0

Alp를 도와 주셔서 감사합니다. 이것은 지금 나의 혼란을 분명히합니다. 그에 따라 코드를 수정합니다. – shyam2347

+0

반갑습니다. (문제가 해결 된 경우 답변을 수락 한 것으로 표시 할 수 있습니다.) – Alp

+0

완료. 죄송합니다. 답변을 포기할만큼 충분한 담당자가 없습니다. – shyam2347