뱅뱅뱅
880
2018-12-17 16:10:47 작성 2018-12-17 16:12:06 수정됨
4
535

정규식 잘하시는 분 계신가요..


A<p>B</p>C<p>D</p>E


Pattern p = Pattern.compile("<p>(.*?)</p>");

이렇게하면 B,D는 구해지는 데요...  


AC,E를 구하고 싶다면 어떻게 해야할까요?..


제가 사실 하고 싶은 것은 A와 C,E도 마찬가지로 <p>A</p><p>C</p><p>E</p>로 만들고 싶다는 것입니다!




0
0
  • 답변 4

  • jslovers
    1k
    2018-12-17 17:51:12

    (적절한기호를 넣으시오)(?![^<]*>|[^<>]*<\/)

    0
  • 뱅뱅뱅
    880
    2018-12-18 13:02:56
    0
  • 적혈귀
    145
    2018-12-18 14:27:47 작성 2018-12-18 17:16:55 수정됨

    질문자님의 올리신 패턴의 경우

    Pattern p = Pattern.compile("<p>(.*?)</p>");
    패턴을 해석하면 <p> </p> 가 존재하고 그안에 어떠한 문자던 1개 이상 들어 있는 경우이므로

    엄밀히 따져서 B, D 가 구해지는 것이 아닌

    <p>B</p> 와 <p>D</p> 가 구해지는 경우 입니다.

    따라서 ABCDE 와 같은 태그 문자열이 아닌 경우를 구하기 위해서는

    위의 <p> 태그만 고려할 경우에는

    <p> 와 </p> 그리고 줄바꿈문자를 제외하면 원하시는 문자가 나오겠지요.


    Pattern pattern = Pattern.compile("[^(<p>)|(</p>)|\\r\\n]");
    
    Matcher matcher = pattern.matcher("A<p>B</p>C<p>D</p>E");
    
    boolean find = false;
    
    while(find = matcher.find())
    {
    
        System.out.println(matcher.group());
    }

    와 같이 작성하시면 원하는 결과가 나올것입니다.

    정규식에 관해서는 

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D

    사이트에서 공부하시면 됩니다.

    한가지 팁을 드리자면 정규식 검색을 지원하는 에디터로 정말로 내가 생각하는 정규식이

    맞는지 미리 확인해 보면 편합니다.(저의 경우에는 sakura editor를 사용합니다.)
    0
  • 뱅뱅뱅
    880
    2018-12-19 15:52:48

    적혈귀


    와우! 감사합니다. 

    (sakura editor... 언어의 장벽...)



    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.