【发布时间】:2015-09-19 06:02:21
【问题描述】:
拥有一个正则表达式模式regexPattern,我如何确定与regexPattern 匹配的最长字符串的长度。
想象中的int LongestLength(string pattern) 应该是这样工作的:
Assert.Equals(LongestLength("[abc]"), 1);
Assert.Equals(LongestLength("(a|b)c?"), 2);
Assert.Equals(LongestLength("d*"), int.MaxValue); // Or throws NoLongestLengthException
虽然问题是在 C# 中,但 C# 和 JavaScript 的答案都很好。
【问题讨论】:
-
除了最简单的正则表达式之外,甚至很难弄清楚哪些字符串可以匹配,更不用说可能的最长字符串了。您要的是魔术或蛮力。两者都不能解决问题。
-
“我怎么猜” - “猜”是什么意思?
-
@nnnnnn 我的意思是如何确定或找出。抱歉,我刚刚更正了问题。
-
将正则表达式转换为 DFA?这显然不是一件小事。
-
您想处理任何 C#(或 javascript)正则表达式吗?如果你稍微限制一下可能性,那就容易多了。 (反向引用会特别烦人)。
标签: javascript c# regex algorithm