我想知道是否有人有算法来计算给定正则表达式(以字符串表示)的最小可能匹配长度。例如,让我们调用这个算法
其中是正则表达式,函数将输出整数值。我想在我的应用程序中使用这个算法,这样我就可以计算出
而不必为每个正则表达式手动标记“最小模式长度”的元数据。在我去尝试重新创造一个看起来很复杂的轮子之前,有什么想法吗,我自己?尽管如此,我还是会喜欢挑战的。我想我必须使用正则表达式来分析正则表达式本身。提前谢谢你的帮助我正在寻找一个用swift编写的解决方案,但是一个通用的版本不会有什么影响。
最佳答案
你想做的事需要一些工作您将需要开发自己的regex解析器,我不会为您这样做(我不知道Swift,但是一个合适的解析器不应该只使用regex)不过,我可以帮你完成算法。
我认为这一工作的方式是,一步一步地删除和修改regex,直到得到一个具体的答案显然,您不应该在您的regex的唯一副本上执行此操作,因为这很可能最终会破坏regex。
下面是一些步骤:
用.
替换char类。需要注意的是,您知道swift的regex如何处理奇怪的语法,例如[]
,它在某些方面将]
视为文本,因为语法在其他方面是无效的。
删除最大值:(regex part){min
,max
}
。
用(regex part){min}
的重复替换min
。
删除regex part
语句:*
删除任何(regex part)*
符号:+
(
regex part
对于备选方案,请找到最短的备选方案,并删除所有其他备选方案:)+
(regex part is long|but this regex part is super duper long|medium regex|
short
用)
替换char类
将所有转义的文本替换为.
,甚至.
。记住,抛弃那些花哨的语法会让你更容易计算出最少需要多少个字符。
这不是一个详尽的清单,但它将有希望让你开始需要注意的是先删除括号,这可能会扰乱操作顺序和反向引用。如果swift的regex具有递归特性,那么这个任务就变得更加困难。
另一件要记住的事情是,有些正则表达式可能永远不会匹配任何内容(但要弄清楚这一点可能很难),而“最小匹配长度”在这些情况下相当没有意义。
关于regex - 计算Swift中正则表达式的最小匹配长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37777328/