你可以做,通過包裝一組在你的正則表達式的一部分,然後用group(X)
其中X
是組數量:
Matcher m = Pattern.compile(">([^<>]*)</a>").matcher(html);
while (m.find()) {
resp.getWriter().println(m.group(1));
}
但是,更好的方法是使用一個簡單的解析器爲此:
import java.io.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
public class HtmlParseDemo {
public static void main(String [] args) throws Exception {
Reader reader = new StringReader("foo <a href=\"#\">Link 1</a> bar <a href=\"#\">Link <b>2</b> more</a> baz");
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(reader, new LinkParser(), true);
reader.close();
}
}
class LinkParser extends HTMLEditorKit.ParserCallback {
private boolean linkStarted = false;
private StringBuilder b = new StringBuilder();
public void handleText(char[] data, int pos) {
if(linkStarted) b.append(new String(data));
}
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if(t == HTML.Tag.A) linkStarted = true;
}
public void handleEndTag(HTML.Tag t, int pos) {
if(t == HTML.Tag.A) {
linkStarted = false;
System.out.println(b);
b = new StringBuilder();
}
}
}
輸出:
Link 1
Link 2 more
@Littlejon - 正則表達式+ HTML的問題是不是很受追捧。 (順便說一句,我不是在這中間又獲得......前一個是我最downvoted答案永遠。http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags) – Kobi 2009-11-15 09:55:56
@Kobi - 所以我見過。但我只搜索HTML片段。也嘗試使用DOM沒有太大的成功。 – Littlejon 2009-11-15 09:58:09
作爲一個附錄,我完全意識到了這些限制,並且準備好將自己的腳指向一個加載槍:-) – Littlejon 2009-11-15 10:04:16