2013-04-09 2 views
0

나는 이에 대한 답을 찾기 위해 고심했다. 내가 C++ boost regex를 사용하고 있지만, 단지 작동하는 표현식을 가지고 있다면 (boost-specific 단서를 기꺼이 받아 들일지라도) 그것을 적용 할 수 있습니다.정규식 멀티 라인 검색 패턴

나는 다음 샘플 텍스트가 :

---- 
this is a sample line -> various chars 
another sample line (again 'might have different chars] 
etc., etc. 
---- 
more data 
again anything in here. 
more lines of text -> etc 
etc. etc. 
---- 
maybe only one line 

및 후행을 "----"선택 사항입니다. '-'2 군에서 문자, 나는 모든 4 다음 줄 를 원하는 반면,

^-{4}\s(.*\s)*?(-{4})+ 

및 변형을,하지만 난 단지 내 2 군의 마지막 줄을 받고 있어요 :

가 나는 시도했다 4 '문자로 시작하는 다른 행인 경우는 예외입니다.

답변

0

정량 된 캡처 그룹은 마지막 인스턴스 만 캡처합니다. 그 그룹을 캡쳐하지 않은 채로 만들고, 정량화 된 전체 표현식을 캡쳐 그룹으로 묶습니다.

^-{4}\s((?:.*\s)*?)(-{4})+ 
    ^^^  ^

(-{4})+의 목적이 무엇인지 확실하지 않습니다. 대신이 의미 :

^-{4}\s((?:.*\s)*?)(?=-{4}|\s*$) 
        ^^^^^^^^^^^^^ 

(?= ...)는 내다 주장이다. 현재 위치 다음에 오는 것이 -{4}이거나 텍스트의 끝 (가능한 공백 이후)임을 주장합니다.

마지막으로, 당신은 경우 텍스트 사이에 빈 줄이 있습니다 ... 하나 비틀기를 만들기 위해

^-{4}\s+((?:.*\s+)*?)(?=-{4}|\s*$) 
    ^  ^ 

을 할 수 있습니다.

+0

완벽; 고맙습니다! – user2259541

+0

@ user2259541 - 편집시 추가 의견이 있습니다. 문제가 생기면 다시 한 번보세요. –

+0

당신은 정규식의 끝 부분에 대해 정확했습니다. 다시 한 번 감사드립니다! 공백 라인 잠재력에 관해서는, 비록 내가 이것을 보지 못했지만, IIUC 그것은 다치게 할 수 없다. 큰; 고맙습니다! – user2259541