Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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
如何使用reqular表达式在java中获取html标记数据_Java_Html_Regex - Fatal编程技术网

如何使用reqular表达式在java中获取html标记数据

如何使用reqular表达式在java中获取html标记数据,java,html,regex,Java,Html,Regex,我想从java中的html代码中获取标签数据。我已经提取了字符串中的HTML代码。但无法从标签中获取数据。谁能告诉我如何使用正则表达式吗。我不想使用解析器,因为它是一次性的工作 示例如下所示 新起点 我需要动作标记值以及输入名称和值。你不应该真正使用正则表达式来解析HTML,你应该得到一个HTML解析器。Java有很多。然而,如果你真的想使用正则表达式,这里有一些方法 要获取action=“…”数据,请使用以下正则表达式: action="(.*?)" input.*?name="(.*

我想从java中的html代码中获取标签数据。我已经提取了字符串中的HTML代码。但无法从标签中获取数据。谁能告诉我如何使用正则表达式吗。我不想使用解析器,因为它是一次性的工作

示例如下所示


新起点

我需要动作标记值以及输入名称和值。

你不应该真正使用正则表达式来解析HTML,你应该得到一个HTML解析器。Java有很多。然而,如果你真的想使用正则表达式,这里有一些方法


要获取
action=“…”
数据,请使用以下正则表达式:

action="(.*?)"
input.*?name="(.*?)"\s*value="(.*?)"
数据将存储在捕获组#1

工作原理:

action=        # Select the action= attribute
"(.*?)"        # Capture the data inside the quotes
input        # Select the opening input tag name
.*?          # Optional Data
name=        # Select the name= attribute
"(.*?)"      # Capture the data inside the quotes
\s*          # Optional Whitespace
value=       # Select the value= attribute
"(.*?)"      # Capture the data inside the quotes

要获取输入名称和编号,请使用以下正则表达式:

action="(.*?)"
input.*?name="(.*?)"\s*value="(.*?)"
名称将存储在捕获组#1中,而值将存储在捕获组#2

工作原理:

action=        # Select the action= attribute
"(.*?)"        # Capture the data inside the quotes
input        # Select the opening input tag name
.*?          # Optional Data
name=        # Select the name= attribute
"(.*?)"      # Capture the data inside the quotes
\s*          # Optional Whitespace
value=       # Select the value= attribute
"(.*?)"      # Capture the data inside the quotes
您可以使用Jsoup()。 我在Scala中这样做,但在Java中是一样的(它最初是针对Java的)。 例如

这只是为了获取html页面,然后您可以使用下一个变量轻松解析它。 我还添加了url->(if(url.startsWith(“http://”)url.startsWith(“https://”)url-else“http://”+url)旁边的内容 但是如果你知道所有的URL都是有效的,你就不必这么做

然后制作另一个变量:

String url = connection
.getElementsByAttributeValueContaining("href", "facebook.com") 
.iterator()
.toList
.map(x => x.attr("href"))
例如,您可以使用在html页面中查找的任何其他url(第二个参数是regex,它将查找包含regex的字段的任何内容) 当您使用迭代器时,它会获取所有与您搜索的正则表达式匹配的字段,并会带来您需要的任何字段,这里我要求提供href,但您可以要求提供任何其他字段

或者你也可以使用

String url = connection
.getElementsByAttributeValueMatching("type", "rss|atom")
.iterator()
.toList
.map(x => x.attr("href"))
如果您正在寻找一个特定的匹配项(第二个参数在这里也是一个正则表达式,它将找到与您编写的正则表达式完全匹配的任何东西),当您执行迭代器时,它将获取与搜索的正则表达式匹配的所有字段,并将带来您需要的任何字段,这里我要求提供href,但您可以要求提供任何其他字段


希望这有帮助……

那么还有什么其他方法?使用HTML解析器。大多数语言都有很多这样的解析器,包括Java。Java中有内置的HTML解析器吗?我不想使用外部库。“我不想使用解析器,因为这是一项一次性工作”使用解析器会比编写此问题更快ii.当我使用java时,我使用了模式pattern=pattern.compile(“action=\”(.*)\);Matcher-Matcher=pattern.Matcher(htmlString);但它仍然不匹配。很抱歉,我使用了调试器,所以它第一次显示匹配,后来又显示匹配以符合要求。它试图得到相同的结果(即再次尝试匹配,结果变为错误)。@RasikaKulkarni如果这回答了您的问题,请您将其标记为已接受(按投票按钮下方的勾号)?谢谢!