Java 使用scanner和regex在没有解析器的情况下从网页中提取除了标记以外的所有内容?

Java 使用scanner和regex在没有解析器的情况下从网页中提取除了标记以外的所有内容?,java,regex,html-parsing,java.util.scanner,Java,Regex,Html Parsing,Java.util.scanner,在Android SDK上工作,它是Java减去一些东西 我有一个解决方案,可以从网页中提取两个正则表达式模式。我遇到的问题是,它在HTML标记中查找内容。我试过jTidy,但在安卓上太慢了。不知道为什么,但我的扫描器正则表达式匹配解决方案多次鞭打它 目前,我将页面源抓取到IntputStream中 is = uconn.getInputStream(); 匹配和摘录如下: Scanner scanner = new Scanner(in, "UTF-8"); String match = "

在Android SDK上工作,它是Java减去一些东西

我有一个解决方案,可以从网页中提取两个正则表达式模式。我遇到的问题是,它在HTML标记中查找内容。我试过jTidy,但在安卓上太慢了。不知道为什么,但我的扫描器正则表达式匹配解决方案多次鞭打它

目前,我将页面源抓取到IntputStream中

is = uconn.getInputStream();
匹配和摘录如下:

Scanner scanner = new Scanner(in, "UTF-8");
String match = "";   
while (match != null) {   
    match = scanner.findWithinHorizon(extractPattern, 0);   
    if (match != null) {   
        String matchit = scanner.match().group(grp);  
它工作得很好,速度也很快

我的正则表达式模式已经有点疯狂了,实际上是一个或类似于这样的两个模式(p1 | p2)

关于如何“但不在HTML标记内”或在开始时排除HTML标记,有什么想法吗?
如果我可以从源代码中排除HTML标记,这可能会大大加快我的界面速度,因为我还需要对原始数据执行一些其他操作。

为什么不使用解析HTML(ergo xml)

可以做的一件事是为收尾角括号添加一个前瞻:

(p1|p2)(?![^<>]*+>)
但再一次,作为一个普遍的解决方案,出于我上面提到的原因,这太脆弱了。如果您确定这些解决方案中的一个(或任何正则表达式解决方案)与您正在处理的特定页面兼容,那么您应该只使用这些解决方案中的一个。

不是这样的,是吗?
((?:<[^<>]++>)++)(p1|p2)
MatchResult match = scanner.match();
if (match.start(1) != -1) {
    // keep searching
}