2010-12-20 60 views
1

我讀從讀起來就像爪哇 - 正則表達式搜索字符串

一個文件中的字符串
<div style="Z-INDEX: 654; BORDER-BOTTOM: 0px; POSITION: absolute; BORDER-LEFT: 0px; WIDTH: 80px; HEIGHT: 22px; BORDER-TOP: 0px; TOP: 64px; CURSOR: auto; BORDER-RIGHT: 0px; LEFT: 240px" id="textboxElt11286249556014dIi15v" lineid="lineid" pos_rel="false" x1="240" x2="320" y1="64" y2="86"><input style="WIDTH: 80px; HEIGHT: 20px" id="textboxElt11286249556014dIi15v_textbox" title="Enter Registration Number Here" tabindex="1" value=" " maxlength="15" size="10" name="scheduled_tribe_registration_number_text"></input></div> 

會有這種和多行數據是不固定的,我想取的風格i的值想用正則表達式來做,因爲子元素也可以具有其中的樣式屬性,並且我想要獲取所有樣式屬性

+4

我想你會得到噸的「不使用正則表達式的HTML解析」的評論。是否有任何特殊的原因,您不能使用HTML解析? – 2010-12-20 07:01:15

+0

我想所有的風格屬性的發生..無法做與薩克斯帕爾 – Varun 2010-12-20 07:11:30

回答

2

Java有很多很好的html解析器庫,HTMLCleaner就是其中之一。

這裏是一個更好的方式來獲取樣式屬性:

import org.htmlcleaner.HtmlCleaner; 
import org.htmlcleaner.TagNode; 

public class Test { 

    public static void main(String[] args) throws Throwable { 
     HtmlCleaner cleaner = new HtmlCleaner(); 
     String html = "<div style=\"Z-INDEX: 654; BORDER-BOTTOM: 0px; POSITION: absolute; BORDER-LEFT: 0px; WIDTH: 80px; HEIGHT: 22px; BORDER-TOP: 0px; TOP: 64px; CURSOR: auto; BORDER-RIGHT: 0px; LEFT: 240px\" id=\"textboxElt11286249556014dIi15v\" lineid=\"lineid\" pos_rel=\"false\" x1=\"240\" x2=\"320\" y1=\"64\" y2=\"86\"><input style=\"WIDTH: 80px; HEIGHT: 20px\" id=\"textboxElt11286249556014dIi15v_textbox\" title=\"Enter Registration Number Here\" tabindex=\"1\" value=\" \" maxlength=\"15\" size=\"10\" name=\"scheduled_tribe_registration_number_text\"></input></div>"; 
     TagNode node = cleaner.clean(html); 
     TagNode div = node.findElementByName("div", true); 
     System.out.println(div.getAttributeByName("style")); 
    } 
} 

如果您熟悉使用jQuery,你也應該檢查jsoup

+0

不要誤導名稱(htmlcleaner)。它做你想要的廣告,很容易使用。 – Axel 2010-12-20 09:31:48

0

不要使用正則表達式來分析html。這就是說,你可以使用類似的東西:

<div \s*style="([A-Z0-9-;: ]*)"\s*> 
+0

...假設,'樣式'始終是'div'元素的第一個屬性,但像你提到的:*不要使用正則表達式來解析HTML *。 – 2010-12-20 07:15:57

+0

我不熟悉java的正則表達式。這不會是貪婪和消費,直到最後收尾雙引號? – dheerosaur 2010-12-20 07:17:39

+0

你會發現問題 – Varun 2010-12-20 07:20:06

0

不要使用正則表達式來解析html。這一次使用正則表達式太:

String line = getNextLineFromInput(); 
String[] parts = line.split("\""); 
String style = ""; 
for (int i = 0; i < parts.length; i++) { 
    if (parts[i].endsWith("style=") { 
    style = parts[i+1]; 
    break; 
    } 
} 

注:這將失敗所有現實世界的html文件,但你用線條,就像你的榜樣行提到的一些輸入;對於這種類型的輸入,這是一個非常專業的解決方案。

相關問題