Java中的正则表达式差异

时间:2013-05-28 19:21:37

标签: java regex

我有以下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;

1 个答案:

答案 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);