我正在尝试匹配用于在两个html标签之间获取标签和数据的模式。
要替换两个标签之间的数据,我想检查该模式的元素 我想制作图案正则表达式,以便我可以将其与html元素匹配并达到该点并替换标签之间的数据。
如果有人知道如何为以下html标签创建正则表达式模式。
我的HTML文件是这样的:
<div id="frame">
<div class="content">
<div class="messages">
<ul>
<li class="sent">
<img src="http://emilcarlsson.se/assets/mikeross.png" alt="" />
<p>####data</p>
</li>
<li class="replies">
<img src="http://emilcarlsson.se/assets/harveyspecter.png" alt="" />
<p>####data</p>
</li>
</ul>
</div>
</div>
</div>
我做了什么:
public void readWritedatatFromHtml(){
InputStream input;
try {
input = getResources().openRawResource(R.raw.view);
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
String text = new String(buffer);
// Pattern tags = Pattern.compile ("<div class=\"content\">+<div class=\"messages\">+<ul>");
// Pattern tags = Pattern.compile ("<div class=\"content\">\n<div class=\"messages\">");
// Pattern tags = Pattern.compile ("<div class=\"content\">(.*?)<ul>");
Pattern tags = Pattern.compile ("<div class=\"messages\">.? </div>");
Matcher m = tags.matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, " <ul> <li class=\"sent1\">\n" +
" <img src=\"http://emilcarlsson.se/assets/mikeross.png\" alt=\"\" />\n" +
" <p>####data</p>\n" +
" </li>");
}
m.appendTail(sb);
Log.i("sb",sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:1)
在任何情况下都不要尝试使用正则表达式解析HTML,除非您希望调用rite 666。 Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn。
使用HTML解析库,请参见this page,了解某些实现方法。
答案 1 :(得分:0)
好吧,在尝试了某种模式之后,我发现类似这样的东西对我来说非常有用:
Pattern tags = Pattern.compile ("<div\\s+class=\"messages\">[\\S\\s]*?<\\/div>");
正如@JGNI所建议的那样,我们应该避免这种情况,但是现在,如果有人有更好的选择,这是我的要求,请指导我,以便对其他人也有帮助。