首先,这里是受影响的代码块:安卓:Matcher.find()永远不会返回
// (somewhere above, data is initialized as a String with a value)
Pattern detailsPattern = Pattern.compile("**this is a valid regex, omitted due to length**", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher detailsMatcher = detailsPattern.matcher(data);
Log.i("Scraper", "Initialized pattern and matcher, data length "+data.length());
boolean found = detailsMatcher.find();
Log.i("Scraper", "Found? "+((found)?"yep":"nope"));
我省略了正则表达式中Pattern.compile,因为它是很长,但我知道它的工作原理与给定的数据集;或者如果没有,反正它不会破坏任何东西。
问题是,我收到反馈I/Scraper(23773): Initialized pattern and matcher, data length 18861
但我从来没有看到“发现?”行,它只是卡在拨打find()
。
这是一个已知的Android错误?我一遍又一遍地尝试过,只是无法让它工作。不知何故,我认为过去几天有些事情因为我的应用程序以前工作正常而被打破,而且我在过去几天收到了该应用程序无法正常工作的几条评论,因此它也明显影响了其他用户。
我该如何进一步调试呢?
嗨Ricket,你介意分享你的解决方案吗?当正则表达式找不到任何匹配时,我的代码也会挂起。我的数据只有几百个字符长,顺便说一句。 – Zarah 2011-03-08 07:53:02
@Zarah我的应用程序刮擦网页数据,网页已经改变,所以我只是更新它,以便它总是再次找到数据。然而,我有大量的非贪婪搜索(`。*?`),我相信那些简单地扩展find()方法需要很长时间(看起来是无限的)。如果正则表达式有可能不匹配,请确保它尽可能优化。我认为这里的问题不是它挂起,而是它试图在每个排列中使用正则表达式,即使在一个小样本上也很耗时。 – Ricket 2011-03-08 13:36:32