2010-03-28 2 views
1

모든 주석 블록 (/*...*/)을 찾고 싶지만 g_regex_match_full 함수는 항상 true를 반환합니다. 코드는 다음과 같습니다.글 리브에서 정규 표현식 사용

// Create the regex. 
start_block_comment_regex = g_regex_new("/\*.*\*/", G_REGEX_OPTIMIZE, 0, &regex_error); 

//Search the regex; 
if(TRUE == g_regex_match_full(start_block_comment_regex, current_line, -1, 0, 0, &match_info, &regex_error)) 
{ 
} 
+0

이 코드 조각을 사용하면 마지막 매개 변수에 대한 설명에 "match_info가 NULL이 아니고 작성되었다는 것을 유의하십시오 함수가 FALSE를 반환하더라도 정규식이 실제로 일치하는지 여부에 관계없이이를 해제해야합니다. " –

답변

2

당신이 생각하는 패턴을 사용하고 있지 않습니다. 당신은 C에서 문자열에서 역 슬래시를 이스케이프 할 필요가 :

comment_regex = g_regex_new("/\\*.*\\*/", G_REGEX_OPTIMIZE, 0, &regex_error); 

나는 당신이 당신의 현재 코드에서 "정의되지 않은 이스케이프 시퀀스 \*"에 대한 컴파일러 경고를하지 않습니다 놀랍군요. 나는 또한 당신이 거기에서 glib에서 오류를 얻지 않았다는 것에 놀랐습니다. 당신이 효과적으로 사용한 패턴은 아마 /*.**/이었고, 그것은별로 의미가 없습니다. (regex_error를 확인 했습니까? 분명히 전체 코드라면 ...)

+0

네, 맞습니다. 그것은 어리석은 실수입니다. – Sebastian