2011-03-05 2 views
0
에서

지정된 텍스트와 같은 :정규식 - Rubular 나에 매칭 BU하지 루비

body = 

yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada 
< via mobile device > 

Yada Yada <[email protected]> wrote: 

yada yada yada yada yada yada yada yada yada 

내가 두 번째 단락과 일치 할, 그래서 내가 뭘 :

body = body.split(/.* <[email protected]> wrote: .*/m).first 

를하지만 루비에 일치하지 않는 것 루블 러라하더라도. 어떤 아이디어? 감사

답변

1

대신을 시도해보십시오

body = body.split(/.*<[email protected]> wrote:.*/).first 

.* 어쩌면 거기에 공간이 있었다 쓸모가 없었습니다, 그리고 .* 전에 공간을 (@aef는 지적) (잘못된 후 공간 귀하의 rubular 검사).

m 수정 자도 제거했음을 유의하십시오. 그렇지 않은 경우 정규 표현식은 전체 문자열과 일치하여 빈 배열을 생성합니다. 즉 루비 여러 모드를 부르는 것을 (그리고 다른 사람은 한 줄 또는 도트 모든 모드를 호출) 다음 .이 줄 바꿈을 포함하여 아무것도 일치합니다.

편집 : See it on ideone.com

+0

덕분에 ... 분할을 사용하여 검사하지? 와이? – AnApprentice

+0

아직도 일치하지 않습니다 ... – AnApprentice

+0

그것은 나를 위해 작동합니다; 내 편집을 참조하십시오. 하지만 네,'scan'도 옵션입니다 :'body = body.scan (/.+/). first'. 그것은'<모바일 장치를 통해>'줄을 자른다; 그것을 유지하고 싶다면, 정규식을'/.+ (? : \ n. +) * /'로 바꿀 수 있습니다. 그러면 다음 빈 줄까지 모두 일치합니다. 이 문제를 해결하는 다른 많은 방법이 있습니다. –

1

하지 않는 공간과 더불어, LINEBREAK으로 끝나지 않는 선

Yada Yada <[email protected]> wrote: 

. 그래서 정규 표현식은 다음과 같아야합니다

/.* <[email protected]> wrote:\n.*/m 

주의 : Windows 시스템 및 HTML과 같은 몇 가지 프로토콜은 서로 다른 LINEBREAK 인코딩을 사용할 수 있습니다. 호환되도록하려면, 먼저 입력을 유닉스 라인 브레이크 인코딩으로 변환 한 다음 데이터 추출을 수행하십시오. 내 linebreak gem을 사용할 수 있습니다.