2013-07-04 5 views
0

start_pattern과 end_pattern 사이에서 문자열을 추출하는 데 사용할 정규 표현식에 대한 도움이 필요합니다. 또한, end_pattern이 없으면 정규식은 줄 끝까지 모든 문자를 grep해야합니다.패턴 사이에 문자열을 추출하는 정규식

Sample 1 : "BOOK1:book1A,book1B,book1C,book1D" 

예상 결과 : book1A, book1B, book1C, book1D

Sample 2 : "BOOK1:book1A,book1B,book1C,book1D|BOOK2:book2A,book2B,book2C,book2DA" 

예상 결과 (1) book1A, book1B, book1C, book1D (2) book2A, book2B, book2C, book2DA

문자열 터미네이터가 "|"인 경우 정규식 (아래 참조)을 해결할 수 있지만 터미네이터가 없을 때 해결할 수는 없습니다.

+0

b c d 
: '(? <= BOOK1 :). *? (? = \ |)?'또한 t "견본 2"가 'book1A, book1B, book1C, book1D | book2 : book2a, book2b, book2c, book2DA'와 일치하지 않는다면 탐욕스러운'. * '대신 욕심이없는'. *?'을 쓰게됩니다. – Nolonar

답변

2

사용 $ 변경 .*

(?<=BOOK1:|\|).*?(?=\||$) 

$.*?에 행이나 문자열의 끝을 표시

.*?는 입력을 게으르게 예를 들어


을 일치합니다

a|b|c|d|e 
정규식

(?<=\|).*(?=\|) 

와 6,

그것이 일치합니다 정규식

(?<=\|).*?(?=\|) 

b|c|d

일치합니다

당신은 끝에 물음표를 추가 할 수 있습니다
+0

오, 보입니다. . 내 잘못이야. – Nolonar

+0

그게 효과가! 감사 Anirudh – Codex