2013-06-24 389 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(); 
    }