【问题标题】:Regular expression is not working and timing out正则表达式不起作用并超时
【发布时间】:2016-04-14 01:51:43
【问题描述】:

我的正则表达式可能有问题(可能循环太多) 我认为这也会导致 MVC (C#) Web 应用程序超时...

正则表达式是:

public const string UrlPartPost = @"^([0-9a-zA-Z-/]*){1,256}$";

我是这样使用的:

Regex.Match(urlPart3, RegExKeys.UrlPartPost, RegexOptions.IgnoreCase).Success

我添加了一个实时测试 - 这也是超时: https://regex101.com/r/vZ0lN5/1

这很好:test1-test2-test3-test4-test5

这个超时:test1-test2-test3-test4-test_5

我该如何解决它以使其不会超时?

更新: “*”到底应该做什么?

【问题讨论】:

  • 只是[\da-zA-Z-/]+[0-9a-zA-Z-/]{1,256}
  • 我忘记了为什么我有星号...不知道它是做什么的,我确实需要确保字符串的长度在 1 到 256 之间...
  • 好吧,我没有看到您的测试字符串超时但基于模式没有成功。见regex101.com/r/vZ0lN5/2

标签: c# regex


【解决方案1】:

* 表示匹配 0+ 次,尽可能多。

您的正则表达式正在灾难性地回溯。

您的正则表达式实际上没有意义,您可能想要描述您要匹配的内容。如果您使用不区分大小写的修饰符,也不需要A-Za-z

如果你想确保你有一个包含 1-256 个指定字符的字符串,试试这个:^([-0-9a-z/]){1,256}$

【讨论】:

  • 我想我需要睡一觉,当我醒来时,我很想知道为什么我把那个星号放在那里(那是不久前的事了),没有它它似乎也能工作.. . 我想我试图允许正斜杠...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2015-06-19
  • 1970-01-01
  • 2014-12-15
相关资源
最近更新 更多