正则表达式错误:表达式执行时间比毫秒长



所以这是我使用 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]*})?

我的示例文本是:

查看主题标签 #品牌定位#设计思维#设计与创新 #数字化客户设计#数字化客户体验#数字化

客户创新#数字化设计 #DigitalDesignandInnovation #DigitalDesignDelivery #DigitalDesignRealization #数字化企业体验#数字化服务设计#体验设计 #Fjord #GraphicDesign #生活服务#服务和体验设计#服务设计#以用户为中心的思维

检查错误后是

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

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

你经历的被称为灾难性回溯,这是因为你的模式有多余的部分。

您有两种选择:

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

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

最新更新