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

时间:2016-03-30 09:52:22

标签: java html regex

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

示例如下

<html>
<head>
   <title>new Start</title>
</head>

<body onLoad="document.forms[0].submit();">
<form action="http://www.google.com"   method="post">
    <input type=hidden name="NUMBER" value="123456">
    <input type=hidden name="mode" value="display">
    </form>
</body>
</html>

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

2 个答案:

答案 0 :(得分:1)

您不应该使用RegEx来解析HTML,您应该获得HTML Parser。 Java有很多。但是,如果您真的想使用RegEx,请按照以下方式进行操作。

要获取action="..."数据,请使用以下RegEx:

action="(.*?)"

数据将存储在Capture Group #1

Live Demo on Regex101

工作原理:

action=        # Select the action= attribute
"(.*?)"        # Capture the data inside the quotes

要获取输入名称和编号,请使用以下RegEx:

input.*?name="(.*?)"\s*value="(.*?)"

名称将存储在Capture Group #1 中,而将存储在Capture Group #2

Live Demo on Regex101

工作原理:

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

答案 1 :(得分:0)

您可以使用Jsoup(http://jsoup.org/)。 我在Scala中这样做,但它在Java中是相同的(它最初用于Java)。 例如,

String connection = Jsoup.connect(url) 
.followRedirects(false) // otherwise you'll get into a loop
.timeout(3000) // also loop
.userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36") // just copied from Google
.referrer("http://www.google.com")
.get()

这只是为了获取html页面,然后您可以使用下一个变量轻松解析它。 我还在网址旁添加了 - &gt; (if(url.startsWith(&#34; http://&#34;)|| url.startsWith(&#34; https://)url else&#34; http://&#34; + URL) 但如果你知道所有网址都有效,你就不必这样做了

然后再制作另一个变量:

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

或者您也可以使用

String url = connection
.getElementsByAttributeValueMatching("type", "rss|atom")
.iterator()
.toList
.map(x => x.attr("href"))

如果你正在寻找一个特定的匹配(第二个参数也是一个正则表达式,它会找到完全匹配你写的正则表达式),那么这个就是你做的迭代器需要搜索所有与你的正则表达式匹配的字段,并且会带来你要求的任何字段,在这里我要求href,但你可以要求任何其他字段

希望这会有所帮助......