这是linux上的单声道锁定(我在官方网站上使用2.6.4 VM发行版)
var match = Regex.Match(sz, linkPattern);
字符串是获取链接和标题的字符串。
var linkPattern = @"<\ba\b[^\>]*\bhref\b*=\b*""([^""\>]*)""[^\>]*\btitle\b*=\b*""([^""\>]*) by [^""\>]*""";
当单声道击中该行时它不会崩溃,抛出异常或任何东西。使用tops我看到单声道使用96%的CPU。我不知道字符串有多长。我怀疑它的&lt; 8kb(我测试了一个不同的url),因为我运行代码所以它已经有几分钟了,所以必须要打破一些东西。
答案 0 :(得分:2)
“太多\b
”是我的第一反应。但是真的:
\b
表示单词边界。在我看来,<\ba
和<a
应该是相同的。此外,\b*
因此意味着“可选择重复词边界”,这听起来相当混乱。
我想我从未使用\b
,而是使用了\s?
或\s*
。
您是否尝试使用其他正则表达式引擎(Perl,PHP)来确定锁定是否归因于Mono?
答案 1 :(得分:1)
Mono的正则表达式实现中存在一些错误,可能导致它无限递归。可能唯一的解决方法是将模式重写为更简单的正则表达式,或者不使用正则表达式来执行此任务。
您可能还想提交错误。我认为Google Summer of Code学生目前正在使用Mono的正则表达式引擎。