我有以下HTML,我希望找到当前播放的艺术家和歌曲标题,我的正则表达式在http://gskinner.com/RegExr/中正常工作,并且它正确地用Java编译,但它与任何内容都不匹配
HTML片段
<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>
Java代码
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;
答案 0 :(得分:5)
您的问题是Matcher#matches()
仅在整个序列与您的正则表达式匹配时才返回true。
您需要Matcher#find()
,它会查找匹配的子序列。
我还认为你最好使用Pattern#DOTALL
标志来让你的.
匹配线断开,而不是试图自己匹配它们,因为系统之间的换行标准不同:
Pattern pat = Pattern.compile("<div class=\"audio_track_title\">SONG TITLE:\r(.+)\r</div>", Pattern.DOTALL);