2012-04-19 213 views
0

我想匹配 「\ B \ W +:」 裏面的字符串 「搜索\ nPrefix與標籤:應用程序:或文字:」Android的模式匹配(不匹配)

代碼如下:

String s = "Search\nPrefix with tag: app: or text:"; 
SpannableString str = SpannableString.valueOf(s); 
Pattern regex = Pattern.compile("\\b\\w+:"); 
Matcher m = regex.matcher(str); 

while(m.find()) { 
    // do stuff 
} 

我在Eclipse中跟蹤了調試器的代碼,while循環從不輸入,這意味着m.find()返回false。 我想正則表達式更改爲簡單

Pattern regex = Pattern.compile("app:"); 

它應該工作,對不對?這是從字符串相同的明確文本。但仍然沒有匹配。 我懷疑匹配器在到達字符串中的換行符時停止匹配。不知何故,必須有一個標誌或一些東西來告訴匹配器掃描整個字符串。

+0

應該按照這種方式工作。也許它不喜歡'SpannableString',試試'Matcher m = regex.matcher(s);' – zapl 2012-04-19 16:56:24

+0

爲了確保,我試過這個字符串,它是一樣的。我需要spannable,因爲我想爲比賽着色,並且我需要m.start()&m.end()來爲每個m.find()做這件事。 – ilomambo 2012-04-19 18:02:33

+1

我的錯誤,再次。我簡化了代碼在這裏顯示它,但實際上while條件是m.find()&& --count> 0,並且count是罪魁禍首。正則表達式是確定的。結論是:「如果你太累不能工作,就去睡吧」。 – ilomambo 2012-04-19 18:09:57

回答

0

我的錯誤,再次。
我簡化了代碼顯示在這裏,但在實踐中,而條件是

while(m.find() && --count>0) 

,並計數是罪魁禍首。正則表達式是確定的。

結論是:「如果你工作太累就去睡覺」

+0

heh。發佈時不應該簡化代碼。這類錯誤是潛在的問題是非常普遍的:p – keyser 2012-05-14 09:00:24

+0

@Keyser,你說得對,這些錯誤在簡化代碼時很常見。另一方面,當你的代碼很長且功能和調用複雜時,恐怕人們將沒有時間和耐心來自己過濾不相關的代碼,也懶得理解這個問題。特別是當你定位代碼的一個非常簡單的方面時。我認爲簡化是可以的,你只需要做對;當你不在這裏發生在我身上的事情。 – ilomambo 2012-05-14 09:45:06

+0

是的,需要的是一個MWE(最小工作示例)。 – keyser 2012-05-14 09:46:51