2011-10-05 25 views
0

我需要一個模式匹配器來獲取來自http響應主體的下面文本中的頁面id值。Java匹配類

<meta name="ajs-page-id" content="262250"> 

我後來得到的內容值總是在responsebody中生成的。

回答

2
Pattern pat = Pattern.compile("<meta\\sname=\"ajs-page-id\"\\scontent=\"(\\d+)\">"); 

這顯然是一個非常字面的模式...但組(1)應該返回數字作爲字符串。 還沒有測試過。

+0

我給它一個鏡頭,我可以添加機體響應這樣:匹配= pattern.matcher(bodyResponse)或者我需要將其打入行? – user979587

+0

可能應該使用'\\ s +'也不能保證屬性按順序顯示,儘管如此。 – MeBigFatGuy

+0

@ user979587你應該可以在整個文本上運行它。對matcher.find()的重複調用將按順序遍歷每個事件。 – gnomed

1

使用像jsoup這樣的HTML解析器來解析和搜索零件。你不應該爲此使用正則表達式。

例如,

String htmlStr = "<meta name=\"ajs-page-id\" content=\"262250\">"; 
Document doc = Jsoup.parse(htmlStr); 
Element meta = doc.select("meta[name=ajs-page-id]").first(); 
if (meta != null) 
{ 
    System.out.println(meta.attr("content")); 
} 
+0

這幾乎肯定是更安全的,但取決於您計劃用輸入文本做什麼,正則表達式幾乎肯定會更快,並在內存中創建較少的對象。如果你很好地瞭解你的輸入文本的範圍,那麼也可能不那麼不安全。它是一種權衡,正如軟件開發中的一切。爲了安全起見,犧牲一些記憶和速度通常是可以的,但它並不適用於每個人(即我工作的公司非常關心性能)。 – gnomed

+1

那麼你可能錯過了提問者,因爲他聲稱它不再在(現在刪除的)「答案」中工作。我敢打賭,標籤並沒有停留在這種模式下,這就是爲什麼它不起作用,爲什麼它不得不被解析。我同意,如果_I_知道它永遠不會改變,我可能會恢復使用正則表達式,但因爲它似乎並非如此,所以這將是最好的選擇。 –