2012-11-06 7 views
3

내가 텍스트 파일에 내용 아래에있는정규식에서 줄 바꿈을 무시 하시겠습니까?

some texting content <img src="cid:part123" alt=""> <b> Test</b> 

나는 즉, 즉

 some texting content NewContent <b> Test</b> 

기본적으로 경우

expectedString = inputString.replaceAll("\\<img.*?cid:part123.*?>", 
    "NewContent"); 

내가 기대 얻을 출력을 inputString 파일을 읽고 문자열에 저장이 다음과 같이 img와 src 사이에 줄 끝 문자입니다. 아래 예제와 같이 작동하지 않습니다.

<img 
      src="cid:part123" alt=""> 

일치하는 동안 regex에서 줄 끝 문자를 무시하는 방법이 있습니까?

답변

5

당신의 dot (.)newline 또한, 당신은 Pattern.DOTALL 플래그를 사용할 수와 일치합니다. 또는 String.replaceAll()의 경우 패턴 시작 부분에 (?s)을 추가 할 수 있습니다.이 플래그는이 플래그와 같습니다. Pattern.DOTALL - JavaDoc에서

: - (?들)

DOTALL 모드는 내장 플래그 를 통해 사용할 수 있습니다. 합니다 (이는 펄에서 을 소위 인 "한 줄"모드에 대한 니모닉입니다.) 그래서

,이처럼 패턴을 수정할 수 있습니다 : -

expectedStr = inputString.replaceAll("(?s)<img.*?cid:part123.*?>", "Content"); 

참고 : -angular bracket(<)을 탈출 할 필요가 없습니다.

+0

안녕하세요, 귀하 께 저에게 http://stackoverflow.com/questions/13865750/why-this-regex-not-giving-expected-output을 도와주세요. 위의 질문과 관련된 질문이지만 두 개의 img 태그가있을 때 예상 결과를 얻지 못하는 것입니다. 당신이 도울 수 있는지보십시오. 미리 감사드립니다. –

1

Pattern.DOTALL 모드를 사용해야합니다. 이 정규 표현식으로 HTML을 구문 분석하는 것은 좋은 생각이 아니다, 그러나,

expectedString = inputString.replaceAll("(?s)\\<img.*?cid:part123.*?>", ...); 

참고 :

replaceAll()은 별도의 인수로 모드 플래그를하지 않지만, 다음과 같이 표현에서 그들을 사용할 수 있습니다 . 대신 HTML 구문 분석기를 사용하는 것이 좋습니다.

2

기본적으로 . 문자는 줄 바꿈 문자와 일치하지 않습니다. Pattern.DOTALL flag을 지정하여이 동작을 사용할 수 있습니다. String.replaceAll()에서, 당신은 당신의 패턴의 전면에 (?s)를 부착하여이 작업을 수행 :

expectedString = inputString.replaceAll("(?s)\\<img.*?cid:part123.*?>", 
    "NewContent"); 

참조에게 또한 당신이 원하는 경우 Pattern.DOTALL with String.replaceAll

관련 문제