【问题标题】:Extract Max Length of allowed string from Regex object从 Regex 对象中提取允许字符串的最大长度
【发布时间】:2016-12-25 15:00:26
【问题描述】:

一旦加载到 C# Regex 对象中,是否可以从正则表达式模式中提取允许的字符串的最大长度?

如果我有一个定义为@"^[A-Z0-9]{0,20}$" 的正则表达式字符串,我可以使用字符串操作来获得20 的最大允许长度。

但是有什么方法可以让我更轻松地获得它,例如通过Regex 对象,如下所示:

var r = new Regex(@"^[A-Z0-9]{0,20}$");
// var max = r.MaxLength;

更新

为了设置一些上下文,我有一个 Asp.Net MVC 5 应用程序,我们在其中使用 RegexValidationAttribute 为我们的视图模型提供输入验证。

我想要做的是覆盖该属性,以便我可以添加一个自定义元数据属性,该属性包含从正则表达式字符串解析的字符串的最大允许长度。在我的字符串编辑器模板中,我将获取自定义元数据值,并将 maxlength="" 属性添加到 html <input> 标记。 现在我知道我可以添加一个StringLengthAttribute 并这样做,但是我必须记住保持正则表达式长度和字符串长度同步。对于 1000 多个模型,我想消除重复数据所需的工作量。

【问题讨论】:

  • 使用另一个正则表达式解析前一个。
  • 你能举个例子吗?
  • 没有我知道的属性,您可以从其中读取字符串的长度,我也猜想它也没有实现。你可以做的是,将它与你的字符串匹配并给出匹配字符的计数,如果你确定有一个限制 - 并且有一个匹配。问题是您可以在正则表达式模式中拥有任意数量的字符限制,因此没有一个实际限制 - revo 的意思是用另一个正则表达式解析您的示例正则表达式中的 20 个
  • 这里:从大括号中取出数字 - \{\d+?\,(\d+?)\} - 或分别为 \{\d+?\,(\d+?)\} $ 最后一个可能的限制
  • 你想达到什么目的?你能添加一个用例吗?

标签: c# regex


【解决方案1】:

一旦加载到 C# Regex 对象中,是否可以从正则表达式模式中提取允许的字符串的最大长度?

没有。 Regex class 没有内置的字段/方法来完成这项工作。

可以编写一种方法来尝试计算匹配的最大理论长度,它适用于您提到的简单正则表达式,但一旦出现多个替代方案和/或长度量词 (+/*) 理论最大长度的计算将是一场噩梦。

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多