前端之家收集整理的这篇文章主要介绍了
regex – 可以使用正则表达式来匹配嵌套模式吗?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以编写与发生未知
次数的嵌套模式匹配的正则表达式。例如,当外部大括号中嵌有未知
数量的打开的大括号时,正则表达式是否匹配开始和结束大括号。
例如:
public MyMethod()
{
if (test)
{
// More { }
}
// More { }
} // End
应匹配:
{
if (test)
{
// More { }
}
// More { }
}
不,这很容易。有限
自动机(它是正则表达式基础的数据结构)除了它的状态之外没有内存,如果你有任意深的嵌套,你需要一个任意大的
自动机,它与有限
自动机的概念相冲突。
您可以将嵌套/配对元素匹配到固定深度,其中深度仅受您的内存限制,因为自动机非常大。然而,在实践中,您应该使用下推自动机,即用于上下文无关语法的解析器,例如LL(自顶向下)或LR(自下而上)。你必须考虑更糟糕的运行时行为:O(n ^ 3)与O(n),n =长度(输入)。
有许多解析器生成器可用,例如用于Java的ANTLR。找到Java(或C)的现有语法也不难。
更多背景:Automata Theory在维基百科