在一个应用程序中使用foreach而不是MatchCollection挂起

本文关键字:foreach 挂起 MatchCollection 应用程序 一个 | 更新日期: 2023-09-27 18:04:48

我刚刚遇到了我编码生涯中最奇怪的问题,我在一个项目中使用了一个代码高亮库,我试图自定义SQL代码查看器。我从样本中提取了一个样本表单,并将其放入项目中,表单在启动时挂起。但是,同样的示例在库附带的示例项目中运行良好。这两个都是Winform应用程序。进一步的调查显示,代码在库本身挂起,而不是在示例表单

中的代码。
var matches = regex.Matches(text);
foreach (Match m in matches) // Here it hangup
{
    ...
}

但是,当我运行库附带的示例winform应用程序时,相同的位置运行得尽可能快。我很困惑。我认为像Regex这样基本的东西无论在哪个应用程序中都应该执行相同的操作。正文不长,只有几百个字。正则表达式是一样的。我没有做任何不同的事情,只是提取了样本表单并将其放入我的项目中并调用它。

谁能帮我一下或给我指个正确的方向?

在一个应用程序中使用foreach而不是MatchCollection挂起

你认为"像正则表达式一样基本的东西"在不同的实现中表现相同是错误的,原因如下:

  • 正则表达式不再是正则的。从几十年前开始,向后引用、lookaround表达式、递归模式匹配等现代功能已经大大扩展了基本的正则表达式。
  • 有几十种正则表达式,每种都实现了不同的功能子集,许多都以不同的方式解释相同的令牌。对你来说,JavaScript(客户端)和。net(服务器端)正则表达式之间的区别可能是最相关的,男孩,这是两个不同的。
  • 可以设置许多参数(比如点是否匹配换行符),这将影响正则表达式的匹配方式(并且可以影响很多性能),您需要确保这些参数设置正确。

最有可能的是,你遇到了一个叫做灾难性回溯的问题。库本身内部的"挂起"通常是由此引起的。为了找出是否存在这种情况以及如何纠正它,我们需要查看您的正则表达式,解释您试图用它做什么和/或输入文本的示例,它有问题。请编辑你的问题并添加这些细节。