2013-06-24 388 views
-1

進出口面臨這樣的問題:正則表達式匹配

我有一個包含一些奇怪的HTML的東西一個字符串,如

String result = "<div id=\"foo\"><div class=\"bar\">xyz</div><div id=\"alert\"><strong>Foo Bar 2% foobar.</strong></div></div>" 

(此字符串比這個例子更大的它包含整體網頁)

我現在的問題是:

  1. 找到行<div id="alert"><strong>Foo Bar 2% foobar.</strong></div>
  2. 提取那裏的數字(數字)2(這可能是[0-9]{1,3})。

我嘗試:

String pattern = "<div id=\"alert\"><strong>(.+) (\\d{1,3})% (.+)</strong></div>"; 
Matcher matcher = Pattern.compile(pattern).matcher(result); 
while(matcher.find()) { 
    Log.i(TAG, "" + matcher.group(); 
} 

但這不會引發預期的結果(我想除了:2)。

我主要是用PHP開發的,所以在這裏處理沒有問題(preg_match),但我不知道如何在Java中做到這一點。

謝謝!

+0

你可以jsoup從標籤中提取內容。 – Raghunandan

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – wtsang02

+0

'regex'是你的問題..不要使用它..使用html解析器提取div標籤的值,然後使用正則表達式提取數字 – Anirudha

回答

1

使用jsoup從html標籤中提取內容。然後你可以在提取的字符串上使用正則表達式。從

http://jsoup.org/download

下載jsoup。

String url = "<div id=\"foo\"><div class=\"bar\">xyz</div><div id=\"alert\"><strong>Foo Bar 2% foobar.</strong></div></div>"; 
    Document doc = Jsoup.parse(url); 
    Elements elements = doc.select("strong"); 
    String s= elements.text(); 
    Pattern p = Pattern.compile("[0-9]{1,3}"); 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
     String result =m.group(); 
    }