2013-10-12 56 views
-4

我想從字符串中提取數據。爲此我使用模式編譯和匹配類。 但我很難開發下面的字符串的正則表達式。java數據提取中的正則表達式

"<WebApicall id="4" time="2013-10-05; 22:44:18" timeStamp="|18|44|22|5|9|113|6|277|0|" tick="11589293" file="self" bdlLine="61" type="url" url="http://www.google.com/"> WebUrl </WebApicall>" 

現在從上面的鏈接我想要的數據4,2013-10-05; 22:44:18等 那麼我如何建立正則表達式。 任何幫助,將不勝感激。

+0

那你試試?看起來很簡單,如果你甚至需要*註冊前。 –

+0

爲什麼不爲此使用XML解析器? –

+0

好的。 BT我不知道XML解析器。你能告訴我它是什麼以及學習的最佳鏈接嗎? –

回答

0

Here是正則表達式:

^<WebApicall\s+id=\"(\d+)\"\s+time=\"(.*)\"\s+timeStamp=\"(\|?\d+\|)+\"\s+tick=\"(\d+)\".*url=\"(.*)\"> 

在這裏,一個Java代碼片段,顯示它如何被使用:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

... 

String id; 
String time; 
String timeStamp; 
String tick; 
String url; 

... 

String textual = "<WebApicall id="4" time="2013-10-05; 22:44:18" timeStamp="|18|44|22|5|9|113|6|277|0|" tick="11589293" file="self" bdlLine="61" type="url" url="http://www.google.com/"> WebUrl </WebApicall>"; 
String regex = "^<WebApicall\\s+id=\\\"(\\d+)\\\"\\s+time=\\\"(.*)\\\"\\s+timeStamp=\\\"(\\|?\\d+\\|)+\\\"\\s+tick=\\\"(\\d+)\\\".*url=\\\"(.*)\\\">"; 
Matcher m = Pattern.compile(regex).matcher(textual); 
if (m.matches()) { 
    id = m.group(1); 
    time = m.group(2); 
    timeStamp = m.group(3); 
    tick = m.group(4); 
    url = m.group(5); 
    ... 
} 
... 
+0

嗨。謝謝。有效。 –

0

如果你想抓住引號內的一切,你可以使用這樣的事情:"([^"]+)"

此正則表達式有它的缺陷,雖然,但除非你更清楚地說明您的需求,這將不得不這樣做。

演示:http://regex101.com/r/qJ6jY8

+0

這並沒有給我預期的結果。以前我試過(。*?),但是這也沒有奏效。任何其他正則表達式,可以幫助我嗎? –

0

您應該使用jsoup解析HTML/XML。它允許您使用選擇器,以便您可以準確抓取您所需的內容。如果你必須使用正則表達式,然後使用 Matcher

Matcher m = Pattern.compile("id=\"(.*)\" time=\"(.*) \"tick").matcher(myXmlString); 

List<String> matches = new ArrayList<String>(); 
while (m.find()) { 
    matches.add(m.group(1)); 
    matches.add(m.group(2)); 
}