2014-01-21 56 views
-1

我希望有人能幫助我理解爲什麼會這樣:麻煩的正則表達式

String s = "tbody\n" +"a\n" +"/tbody"; 
    Pattern p = Pattern.compile("tbody[^(/tbody)]+/tbody"); 

    Matcher m = p.matcher(s); 

    while(m.find()){ 
     System.out.println("found: \n\n"+m.group());    
    } 

輸出是:

found: 

tbody 

a 

/tbody 

但如果String s = "tbody\n" +"ao\n" +"/tbody"(我添加了一個後O)它什麼都不印。任何人都可以告訴我我錯過了什麼嗎?

我正在使用NetBeans 7.4。

+0

正則表達式中的[[]]是一個*字符類* - 現在你知道這個名字,查找它:)在任何情況下,只考慮使用*非貪婪/惰性量詞*:'tbody (。*?)/ tbody'(您可能還對*單詞界限感興趣*)。 – user2864740

+0

您似乎在試圖弄清楚如何使用正則表達式解析HTML。由於HTML不是常規語言,因此這是一個非首選項。請閱讀[這個答案](http://stackoverflow.com/a/1732454/18157) –

+0

@JimGarrison我不知道我想要做的是解析。我需要收集來自特定網站的信息,這些信息位於這些標籤之間。 – user2847339

回答

1

[^(/tbody)]不是你認爲的那樣。 這並不意味着任何不是/tbody的字符串。 相反,它會逐一取消每個字符。 Now /tbody contains o and you added o (so you have that o negated)。 這就是爲什麼它不匹配。

嘗試增加x代替o,它會繼續工作 (如x是不是你否定了字符之間)。