2014-09-04 2 views
0

그래서 나는 몇 등 같은 라인이 : 나는 아래의 모든 데이터를 추출하는 자바 정규식 구축을 위해 노력하고모두 매치 라인

tag1: 
line1word1 lineoneanychar 
line2word1 
tag2: 
line1word1 .... 
line2word1 ..... 

을 태그들. 즉 :

String parsed1 = line1word1 lineone\nline2word1 
String parsed2 = line1word1 ....\nline2word1 ..... 

나는이 같은 것을 사용을 할 수있는 올바른 방법을 생각하지만, 나는 꽤 괜찮 그것을 가지고하지 않은 :

Pattern p = Pattern.compile("tag1:\n({1}.*)\n(?!\\w+)", Pattern.DOTALL); 
    Matcher m = p.matcher(clean_data); 
    if(m.find()){ 
     System.out.println(m.group(1)); 
    } 

어떤 도움을 주시면 감사하겠습니다!

답변

1

은 정규식에 \\ 도주하는 것을 기억

public static void main(String[] args) throws Exception { 
    String input = "tag1:\n" 
      + " line1word1 lineoneanychar\n" 
      + " line2word1\n" 
      + "tag2:\n" 
      + " line1word1 ....\n" 
      + " line2word1 .....\n"; 

    Pattern p = Pattern.compile("tag\\d+:$\\n((?:^\\s.*?$\\n)+)", Pattern.DOTALL|Pattern.MULTILINE); 
    Matcher m = p.matcher(input); 
    while(m.find()){ 
     System.out.println(m.group(1)); 
    } 
} 

같을 수 없습니다. D \

은 숫자에게 있습니다

\ sa의 공간

(? : 뭔가)이 정규

+0

최적의 진짜 '그룹'되지 않습니다 그룹을 만들기위한 것입니다, 감사합니다 ! – bge0

+0

그래서 정규식 대부분을 얻지 만 무엇을합니까? $ do? 나는 $가 일반적으로 성명의 끝임을 깨닫는다. 그래서 (? :^\\ s. *? $ \\ n)는 라인이 어떤 것에 의해 뒤 따르는 공백으로 시작하지 않는 한 ->입니다. 그리고 개행으로 끝나는 [?] – bge0

+0

? 는 줄 끝 문자 ($)와 관련이 없지만 *.는 욕심이 없다는 것을 나타냅니다. 그렇지 않으면. *가 전체 문자열 끝에 모두 일치합니다. – JSlain