2012-08-08 100 views
0

我想第一次在Java中使用正則表達式。 我想獲得一些字符串的一部分。該字符串是一個有點複雜:java正則表達式得到字符串的某些部分

<description> 
    &lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0' 
    src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT- 
    ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
    alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text 
</description> 

我需要的是拿到位於字符串HREFALT。爲此我正在做這樣的代碼:

for(Element element : elements) 
{ 
    //Elements children = element.children(); 
Pattern pattern = Pattern.compile("a\\bhref=*(.html|.htm)>"); 
String[] data = pattern.split(element.text()); ... 
} 

等等。目前,我只想取得成功,但只能獲得href。回報總是整個字符串。不正確?我已經把html擴展保證,並沒有發生。

+4

如果你打算解析html,爲什麼不使用[現有的html解析器](http://htmlparser.sourceforge.net/)? – Thomas 2012-08-08 20:36:56

回答

1
public static void main(String[] args){ 
    String sourcestring = "<description>&lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0' src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT- 
ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text</description>"; 
    Pattern re = Pattern.compile("(?<=href='|alt=')[^']*|(?<=href=\"|alt=\")[^\"]*"); 
    Matcher m = re.matcher(sourcestring); 
    int mIdx = 0; 
    while (m.find()){ 
     for(int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++){ 
     System.out.println("[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx)); 
     } 
     mIdx++; 
    } 
    } 
+0

這不是我正在努力,但是我認爲這看起來不錯。 – Matt 2012-08-08 20:51:55

+0

你在找什麼,更準確些? – 2012-08-08 20:53:06

+0

我?我只是評論 - 不是我的問題;-)我只是解決了href搶劫的問題,而不是搶劫。 – Matt 2012-08-08 20:56:17

1

你的正則表達式不會找到對你有用的東西,甚至可能被打破。

下面的正則表達式爲真:

* matches 0 or more of the preceding character 

. is any character 

所以你當前的正則表達式是試圖找到匹配的模式,其中有一個A,一個單詞邊界,串HREF,0以上的字符串=字符,然後是任何字符,後跟html或任何字符,然後是htm,然後是>字符。如果你想使用這些特殊字符,你需要將它們轉義出來

形成正則表達式的更好方法就像上面的Alogomorph的例子。

請看看正則表達式的Java文檔的詳細信息,哪些是允許:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

也有很多在網路上提供的教程和例子。

+0

我試圖避免循環。就像我說的,這是我第一次嘗試使用正則表達式。感謝您的精確觀察。 – learner 2012-08-09 00:53:41

1

不要對此任務使用正則表達式,除非你知道絕對知道文本格式不會改變。你似乎想用正則表達式解析(X | HT)ML,那就是a bad thing。我建議解析爲XML並使用XPath。

+0

塔索斯,我不知道這件事。我會嘗試這種方法。感謝您的回覆。 Definetely我會嘗試。 – learner 2012-08-09 00:09:29

相關問題