2015-02-24 53 views
0
Elements elements = doc.select("span.st"); 
for (Element e : elements) {   
out.println("<p>Text : " + e.text()+"</p>"); 
} 

元素e包含帶有一些電子郵件ID的文本。如何從中提取maild ID。我已經看到了Jsoup API文檔,它提供了:matches(regex),但我不明白如何使用它。我試圖用如何使用jsoup提取電子郵件ID?

^[A-ZA-Z0-9 _#$%&「* +/=`!?{|}〜^ .-] + @ [A-ZA-Z0- 9 .-] + $

這是我在Google上搜索時發現的。

提前感謝您的幫助。

+0

提供一些html示例 – alkis 2015-02-24 14:05:16

回答

1

:matches(regex)如果你想找到根據指定的正則表達式的東西(例如查找包含電子郵件的所有節點)是有用的。

我認爲這不是你想要的。 Instead, you need to extract the email from e.text() using regex。在你的情況下:

Elements elements = doc.select("span.st"); 
for (Element e : elements) {   
    out.println("<p>Text : " + e.text()+"</p>"); 
    out.println(extractEmail(e.text())); 
} 

// ... 
public static String extractEmail(String str) { 
    Matcher m = Pattern.compile("[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\\.[a-zA-Z0- 9-.]+").matcher(str); 
    while (m.find()) { 
     return m.group(); 
    } 
    return null; 
} 
+0

謝謝你@路易斯蘇亞雷斯。我能夠得到您的解決方案的電子郵件,但我不明白的用法:匹配(正則表達式)。我試過jsoup API,但我沒有得到它。如果可能的話給我一個例子。謝謝 – maghub 2015-02-25 11:51:39

+0

在這裏閱讀:http://stackoverflow.com/a/23319612/819651 我沒有,並沒有發現任何的例子,但過程會是這樣: 'doc.select(「span.st:匹配(@)「)'會在您的示例中施加更嚴格的條件;它只會選擇包含「@」的節點(不管嵌套的級別如何)。 – 2015-02-25 12:02:57

+0

非常感謝@路易斯蘇亞雷斯 – maghub 2015-02-25 12:47:09