首先,這裏是受影響的代碼塊:安卓: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