我正在使用 matchcollection,例如:
matches = new Regex(ABS_URL_REGEX, RegexOptions.IgnoreCase | RegexOptions.Compiled).Matches(TargetText);
在这种情况下,正则表达式匹配 URL 值:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'" + "\"" + ".,<>?«»“”‘’]))
Regex 本身运行得非常快,但在检查结果时应用程序挂起:
if (matches != null && matches.Count > 0)
如果我取出计数部分,此调用将很快通过,但随后卡在下一行:
foreach (Match thisMatch in matches)
最常见的罪魁祸首似乎是有 0 个匹配项。那么如何在不遇到这些挂起问题的情况下检查结果呢?