2012-04-19 160 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