2013-05-28 3 views
1

나는 내 정규 표현식 http://gskinner.com/RegExr/ 작동 현재 재생중인 아티스트와 노래 제목을 찾고자 다음과 같은 HTML을 가지고 올바르게 아직 아무것도 일치하지 않는 자바정규 표현식

HTML을 컴파일

을 니펫을 diffrences
<div class="audio_playing_title">Currently Playing. 
    <div class="audio_home_box"> 
    <div class="audio_playing_stats"> 
     <div class="audio_playing"> 
      <div class="audio_dj_title">PRESENTER: 
       AutoDJ - The Slogan 
      </div> 
      <div class="audio_track_title">SONG TITLE: 
       The Artist Name - Song Name 
      </div> 
     </div> 
    </div> 
</div> 

자바 코드

String data = getWebsiteData(url); 
data = data.replace("\\t", ""); 

Pattern pat = Pattern.compile("<div class=\"audio_track_title\">SONG TITLE:\r(.+)\r</div>"); 

Matcher matcher = pat.matcher(data); 

if (matcher.matches()) 
{ 
    data = matcher.group(1); 
} 
else 
{ 
    System.out.println("No match"); 
} 
return data; 
+2

내가 말할 것이다 : 줄 바꿈 표준은 시스템간에 차이가 있기 때문에

는 또한, 당신이 당신의 . 매치 라인이 너무 대신 그들에게 자신을 일치하도록 시도의 중단하도록하기 위해 Pattern#DOTALL 플래그를 사용하여 더 나을 것 같아 HTML 구문 분석을 위해 RegEx 사용을 중단하십시오. 대신, [jsoup] (http://jsoup.org/) –

+0

과 같은 전용 라이브러리를 사용하는 이유는 정규식 .. 파서 .. – Anirudha

답변

3

귀하의 문제는 전체 순서가 일치하는 경우 Matcher#matches()는 true를 반환한다는 것입니다 당신의 정규식.

일치하는 하위 시퀀스를 찾을 Matcher#find()이 필요합니다.

Pattern pat = Pattern.compile("<div class=\"audio_track_title\">SONG TITLE:\r(.+)\r</div>", Pattern.DOTALL);