正则表达式错误:表达式执行时间超过ms

时间:2017-03-22 08:12:07

标签: c# css regex

所以这是我使用C#从特定字符串中提取CSS的正则表达式模式:

(([\s]*\/\*[^\*]+\*\/)?((@media|@keyframes)[^{]+\{[\s]*)?(((\b(html|head|body|a|abbr|area|audio|b|base|blockquote|button|canvas|code|datalist|dialog|div)|em|embed|font|footer|form|h1|h2|h3|h4|h5|h6|header|hr|i|iframe|img|input|label|li|link|main|map|menu|meta|object|ol|optgroup|option|output|p|param|pre|section|select|span|strong|sup|table|textarea|tfoot|th|head|td|title|tr|u|ul|video|\*))\b)?((\.|\#|\[)[^\s,\.\#\|]+)*([:]{1,2}[^\s,]+)*((\s)|(\,)|(\+)|(\~)|(>)|(&telde;))*)+[\s]*\{[^}]+\}([\s]*\})?

我的示例文字是:

  

查看标签#BrandPositioning #DesignThinking #DesignandInnovation #DigitalCustomerExperience #DigitalCustomerInnovation #DigitalDesignDigitalDesignandInnovation #DigitalDesignDelivery #DigitalDesignRealization #DigitalEnterpriseExperience #DigitalServiceDesign #ExperienceDesign #Fjord #GraphicDesign#LivingServices#ServiceandExperienceDesign#ServiceDesign#UserCenteredThinking

检查错误后

  

表达式执行时间超过250毫秒

这是为什么?以及如何治愈?。

1 个答案:

答案 0 :(得分:1)

你所经历的是灾难性的回溯,它的出现是因为你的模式有多余的部分。

您有两种选择:

  • 进行主要测试以避免针对无用输入运行正则表达式
  • 简化您的正则表达式

似乎导致回溯的原因是((\.|\#|\[)[^\s,\.\#\|]+)*您可以转换为((\.|\#|\[)[^\s,\.\#\|]*)