Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java解码html代码?_Java_Html_Regex_Decode - Fatal编程技术网

如何使用Java解码html代码?

如何使用Java解码html代码?,java,html,regex,decode,Java,Html,Regex,Decode,可能重复: 我需要从html文件中提取段落(如StackOverflow中的title) 我可以使用Java中的正则表达式来提取我需要的字段,但我必须对获得的字段进行解码 示例 提取的字段: Paging Lucene&#39s search results (with **;** among **&#39** and **s**) 解码后的字段: Paging Lucene's search results java中是否有允许我转换这些html代码的类?使用 不要试图用

可能重复:

我需要从
html
文件中提取段落(如StackOverflow中的
title

我可以使用Java中的正则表达式来提取我需要的字段,但我必须对获得的字段进行解码

示例

提取的字段:

Paging Lucene&#39s search results (with **;** among **&#39** and **s**)
解码后的字段:

Paging Lucene's search results
java中是否有允许我转换这些html代码的类?

使用


不要试图用regexp解决所有问题

虽然您可以做一些事情,例如替换实体,但更好的方法是实际使用(健壮的)HTML解析器

见这个问题: 对于为什么这是一个坏主意做瑞士陆军电锯认真地说,阅读这个问题和最上面的答案,这是一个堆栈溢出的亮点

Chuck Norris可以用正则表达式解析HTML

坏消息是:编码字符的方法不止一种

例如,字符“λ”可以表示为
λ
和#x03BB
和#X03bb

如果你真的不走运,一些网站会依赖浏览器的功能来猜测字符的含义<代码>™无效,但许多浏览器会将其解释为

显然,最好将其留给专门的库,而不是自己尝试破解自定义正则表达式。

因此,我强烈建议:

  • 将字符串馈送到健壮的HTML解析器中
  • 返回已解析(并完全解码)的字符串

您的HTML是否包含标记?是的,但提取的字段不包含用于初学者的标记,这首先是完全错误的。只需使用一个类似的Jsoup。一个稍微好一点的就可以立即为您卸载HTML了。我需要从具有相同结构和标记的HTML中提取(比如wikipedia)。所以我认为正则表达式是一个很好的方法。@Carasus先生:不,不是。使用HTML解析器和DOM进行提取。这就是他们的目的!顺便说一句,尝试使用DBPedia。它已经是维基百科的解析版本。你知道StackOverflow的解析版本吗?我尝试将正则表达式与stackoverflow htmls结合使用,效果很好。我用一组应用于htlm的正则表达式提取标题和答案。@MikeSamuel页面在第3条中写道:“不……在U+0080–U+009F范围内”。0x0099在此范围内。-最新链接
import org.apache.commons.lang.StringEscapeUtils;
// ...
String afterDecoding = StringEscapeUtils.unescapeHtml(beforeDecoding);