【问题标题】:Android Pattern matching (not matching)Android模式匹配(不匹配)
【发布时间】:2012-04-19 16:43:45
【问题描述】:

我正在尝试匹配字符串“Search\nPrefix with tag: app: or text:”中的“\b\w+:”

代码如下:

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:");

它应该可以工作,对吧?它与字符串中的显式文本相同。但仍然没有匹配。 我怀疑匹配器在到达字符串中的换行符时会停止匹配。而且必须有一个标志或其他东西来告诉匹配器扫描整个字符串。

【问题讨论】:

  • 应该按原样工作。可能不喜欢SpannableString,试试Matcher m = regex.matcher(s);
  • 只是为了确保,我尝试了字符串并且它是相同的。我需要跨度,因为我想为匹配着色,我需要每个 m.find() 的 m.start() 和 m.end() 来做到这一点。
  • 我又错了。我简化了代码以在此处显示它,但实际上,while 条件是 m.find() && --count>0,而 count 是罪魁祸首。正则表达式没问题。结论是:“工作累了就睡吧”。

标签: android regex spannablestring


【解决方案1】:

我又错了。
我简化了代码以在此处显示,但实际上 while 条件是

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

,而 count 是罪魁祸首。正则表达式没问题。

结论是:“工作累了就睡吧”

【讨论】:

  • 嘿。发布时不应该简化代码。这些类型的错误是潜在的问题是很常见的:p
  • @Keyser,你说得对,在简化代码时这类错误很常见。另一方面,当你有一个很长的代码,包含复杂的函数和调用时,担心的是人们可能没有时间和耐心自己过滤不相关的代码,也不会费心去尝试理解问题。特别是当您针对代码的一个非常简单的方面时。我认为简化是可以的,你只需要做对;当你不这样做时,我发生了什么事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2017-11-13
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多