是否可以编写与发生未知次数的嵌套模式匹配的正则表达式。例如,当外部大括号中嵌有未知数量的打开的大括号时,正则表达式是否匹配开始和结束大括号。
例如:
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在维基百科
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。