2016-03-30 7 views
-2

javaのhtmlコードから<form>タグデータを取得したいと思います。私は文字列でHTMLコードを抽出しました。しかし、タグからデータを取得することはできません。誰でも正規表現でそれを行う方法を教えてもらえますか?私はその一度だけの仕事のためパーサーを使いたくない。 Iアクションタグ値及び入力された名前と値を必要reqular式でjavaで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

[正規表現でHTMLを解析しないでください](http://stackoverflow.com/questions)/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Biffen

+0

他の方法は何ですか? – User3091

+0

HTMLパーサーを使用します。 Javaを含むほとんどの言語にはたくさんのものがあります。 – Biffen

答えて

1

実際には、RegExを使用してHTMLを解析するべきではありません。HTMLパーサーが必要です。 Javaには多くのものがあります。しかし、本当にRegExを使用したい場合は、ここで説明します。


action="..."データを取得し、次の正規表現を使用するには:はキャプチャグループ#1

Live Demo on Regex101

内部に格納されますデータ

action="(.*?)" 

をどうやってそれは動作します:

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

次正規表現を使用して、入力された名前と番号を取得するには:

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

は、キャプチャグループに#1、および保存されますキャプチャグループ#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 
+0

こんにちは..私はjavaを使用していますので、 – User3091

+0

パターンパターン= Pattern.compile ( "action = \"(。*?)\ ""); Matcher matcher = pattern.matcher(htmlString); – User3091

+0

まだそれは一致していません – User3091

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ページを取得するためのもので、次の変数で簡単に解析できます。 また、url - >(if(url.startsWith( "http://")|| urlの横に追加しました。startsWith( "https://で)他のURLは "http://" + URL) いますが、すべてのURLが別の変数を作成し、有効な

ている知っていればあなたがする必要はありません。

String url = connection 
.getElementsByAttributeValueContaining("href", "facebook.com") 
.iterator() 
.toList 
.map(x => x.attr("href")) 

をたとえば、あなたはhtmlページで探している他のURLを使うことができます(2番目のパラメータは正規表現です。には正規表現が含まれています) イテレータを実行すると、あなたの正規表現に一致するものが検索され、あなたが求めるフィールドを持って来るでしょう、ここで私はhrefを求めましたが、他のフィールドを求めることができます

か、また、この1つはあなたが特定の試合(第2 paramはここにも正規表現であるを探しているなら、それは一致正確あなたが書いた正規表現何かを見つけるでしょうです

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

を使用することができます)、イテレータを実行すると、正規表現に一致するすべてのフィールドが検索され、必要なフィールドが表示されます。ここでhrefを求めますが、他のフィールドを尋ねることができます。

関連する問題