用户可以在我的系统中定义标识符的格式,并将其作为正则表达式字符串存储在d / b中(例如,“/^\d{6}$/
”,或更复杂的“{{ 1}}“)。
有人可以建议我如何计算给定正则表达式可以匹配的字符串的最大长度(感谢@Ulver)?
非常感谢您的阅读!
答案 0 :(得分:1)
这个答案假设有5件事:
*
或+
个运算符。foo{n, }
类型的模式,其中n
是一些正整数值。^
开头,以$
结尾。 要计算它们匹配的字符数量,您可以查看表达式并查找2种模式:
{n}
,翻译为完全匹配n
次。在这种情况下,请提取n
。{n, m}
,转化为至少n
次,最多m
次。在这种情况下,请提取m
。一旦您拥有所有n
和m
值,您只需将它们添加到一起。
关于假设的更多细节:
随着表达式变得越来越复杂,您需要跟踪各种字符。例如,^[A-Z]{2}$
表示匹配2个大写字母。因此,匹配的长度将为2.另一方面,foo{2}
表示fooo
。但afooo
和foooobar
也会匹配。因此,您无法控制模式的长度。同样(abc){2}
表示匹配abc
两次,因此,在这种情况下,您需要将n
(大括号中的值)的值乘以其中的长度。在它之前的括号,如果有的话。当然,您可以使用嵌套值。
*
和+
运算符分别表示0或更多,以及1或更多。因此,从理论上讲,对于匹配的东西的长度没有限制。
与第2点类似,{n,}
表示至少匹配n
次。因此,没有上限。
与第1点类似,没有^
和$
锚点,表达式可以匹配任何字符串。表达式foo
可以匹配afoo
,foobar
,foooooooooooooooooooooooo
等等。
我采用这个假设的原因与第1点类似。您可以增强应用程序以查找[]
对并将它们计为1个字符,但我认为您可以有其他注意事项。