2012-07-02 3 views
0

C++에서 regex를 사용하여 파일 이름을 일치시키고 싶습니다. 원하는 파일 이름의 형식은 "ProjectXX.txt"입니다. 여기서 X는 숫자 여야합니다. 내가 사용하는 정규식 코드는 같습니다 나는 CString (그러므로 L"") 내가 WINDOWS.H를 사용하기 때문에 필요C++에서 regex를 사용하여 파일 이름 일치하기

static const wregex initFile(L"(\\Project)(\\d\\d)\\.(\\txt)"); 
wsmatch result; 
if(regex_match(fileName, result, initFile)) 

. 그러나 코드를 예외를 throw하고 정규식을 수정하려고했지만 파일 이름과 일치하도록 관리 할 수 ​​없습니다. 올바른 정규 표현식은 무엇입니까?

+2

'L "Project [0-9] {2} .txt"... 나는 생각한다. – hmjd

+0

어떤 예외가 발생합니까? – MSalters

답변

0

@ hmjd의 의견은 거의 맞지만 조금 너무 넓습니다. 또한 L"Project[0-9]{2}@txt"을 수락합니다. 원한다면 L"Project[0-9]{2}\\.txt"

+0

그리고 [ "[0-9] {2}"는 (는) "\\ d \\ d"'와 어떻게 다른가요? (아마 역시 괄호로 만든 캡처가 필요합니다.) –

+0

@JamesKanze : 개인적인 취향대로, C++ 정규 표현식에서'\'을 피하는 것이 합리적입니다. 그것은 빨리 읽을 수 없게 될 수 있습니다. – MSalters

+0

나는 그것을 이해할 수있다. (물론, 표준 C++에'regex'가 있다면, 여러분은 또한 원시 문자열을 갖게됩니다 :-). 그러나 boost :: regex ...)하지만이 경우에 그는 이미'\\ d '를 사용했고 그의 정규식은 그 점에서 맞습니다. 적어도 정규 표현식이 틀린 이유를 언급했을 것입니다. –

0

\\의 목적은 Pt 앞에 무엇입니까? 첫 번째는 일 것입니다. 정규식에는 시퀀스 \P이라는 이스케이프가 없으므로 오류가 발생할 수 있습니다. 그것들을 버리십시오 (`L "(Project) (\ d \ d) \. (txt)"), 이 작동해야합니다.

그리고 나는 그것에 대해 : 왜 상수가되어야하는 문자열을 캡처해야합니까? 나는 L"Project(\\d\\d)\\.text"이라고 쓰고, 을 사용하고 캡쳐를 사용하는 대신 L"Project"L"txt"을 사용한다.

관련 문제