Java正则表达式:计算HTML文档中的单词/短语/通配符

Java正则表达式:计算HTML文档中的单词/短语/通配符,java,html,regex,Java,Html,Regex,我的情况是,我需要在HTML文档中查找单词/短语/通配符的出现次数。我认为最好的解决方案来自正则表达式。关于如何做到这一点的任何意见或想法。如果它的正则表达式可以指导我如何开始使用Java。我建议使用HTML解析器(例如)而不是正则表达式来完成这项工作。Java中的Simple Pattern pattern = Pattern.compile("myregex"); int count = 0; // Read each line of the HTML document into the

我的情况是,我需要在HTML文档中查找单词/短语/通配符的出现次数。我认为最好的解决方案来自正则表达式。关于如何做到这一点的任何意见或想法。如果它的正则表达式可以指导我如何开始使用Java。

我建议使用HTML解析器(例如)而不是正则表达式来完成这项工作。

Java中的Simple

Pattern pattern = Pattern.compile("myregex");

int count = 0;

// Read each line of the HTML document into the below variable

String line = ...

if(pattern.matcher(line).matches())
{
    count++;
}

既然你指定了正则表达式,我假设你只是在寻找关键词。如果您不想像dogbane建议的那样使用jsoup,您可以始终使用

,这是一个如何计算正则表达式匹配数的示例。该示例仅统计输入字符串中“foo”的出现次数

Pattern p = Pattern.compile("foo");
Matcher matcher = p.matcher("foo bar foo baz foo qux foo");
int count = 0;
while (matcher.find()) {
    count++;
}
System.out.println("Count: " + count); // count == 4

如果命令行单行程序运行良好,为什么还要编写无数行程序

% perl -nle 'while (/pat/g) { $count++ } END { print $count }' input files go here
您可以使用许多其他现有的工具,甚至是古老的
awk
,实现同样的功能。既然工作已经完成了,为什么还要使用汇编语言呢?看起来像NIH综合症一样危险

也许你还有其他要求,我已经理解了。上一次,一位高级Java人员问我一个问题,他问我如何判断输入文件中哪些行上有制表符。他本来打算为此编写一个Java程序(BOGGLE!),但在最后一刻,他认为可能有更好的方法


有。

Regex不是解析(x)HTML的最佳工具?我不认为他真的需要正常意义上的解析,我认为他只是想计算出现的次数。因此,将HTML视为字符串就可以了,正则表达式也可以很好地工作。在他需要的东西上,我可能是错的。Java不是最好的工具。@tchrist我需要在不同的平台(包括solaris)上解析该文档,因为Java是独立于平台的,所以我没有其他工具choicee@tchrist-但是我们所有的代码已经用Java写了5年多了,我现在不能用其他语言重写所有的东西。这是我们项目中正在实施的一小部分。我们确实使用perl,但不是为了这个application@Haakon-我给出的代码不准确。它是伪代码,因此询问者可以从中受益并编写其逻辑,而不是被欺骗:)
匹配
是错误的函数;它在Java中无法正常工作。你需要
find
@tchirst-这肯定不是“错”。它确实相配。但“查找”也可以在一行上计算多个事件。“在这里,as match每行只给你一个匹配项”。@haakon-嗯,我想这会管用的。但是因为我正在考虑HTML文档,所以我会在这样做之前去掉HTML标记。还在测试一些东西吗?Jsoup平台无关?@sharma是的,它只是一个jar文件。