2011-02-03 1 views
1

현재 문자열에서 부분 문자열을 정규 표현식과 일치시켜 추출하려고합니다. 입력 문자열은 모두 foo.bar("""foobar""") 형식입니다. 여기서 foobar는 추출 할 부분 문자열입니다. 이 내가이 작업을 위해 쓴 정규 표현식이다 :,자바 정규 표현식 : 개행 문자와 뒤에 공백 문자를 매치

Pattern pattern = Pattern.compile(
      ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.MULTILINE); 

그것은 단순한 문자열에 대해 잘 일치,하지만 공백 다음에 줄 바꿈이 일치하는 문자열에서 발생할 때마다 실패 즉 foo.bar("""foo\n bar""")

방법 나는 그 패턴이 그 문자열과 일치하도록 패턴을 변경해야합니까?

답변

7

Pattern.MULTILINE 대신 Pattern.DOTALL이 필요합니다. Pattern.MULTILINE^$의 행동에 관한 것입니다 및 .와 일치하는 줄 바꿈과는 아무 상관이 없습니다 :

Pattern pattern = Pattern.compile(
    ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.DOTALL); 
+0

, 감사를 나는'이용할 수 있도록 패턴 중간에 변경할 때이 DOTALL에서 여러 행을 대체하는 것을 잊었다 :-)를 행한 '([^ "{3}] +)'... 대신에. (. +)'를 사용하십시오. – jbaiter

+1

JeanMarie, 대답의 왼쪽에있는 체크 표시를 클릭하면 응답 할 수 있습니다. – jluzwick