相关疑难解决方法(0)

为什么不可能使用正则表达式来解析HTML/XML:外行人的术语中的正式解释

在没有关于解析(X)HTML或XML并且询问正则表达式的问题的情况下,SO上没有任何日子.

虽然相对容易想出用于演示此任务的正则表达式的不可行性的示例或用表达概念的表达式集合,我仍然无法在SO上找到为什么在外行人中无法做到这一点的正式解释条款.

到目前为止我在这个网站上找到的唯一正式解释可能非常准确,但对于自学成才的程序员来说也很神秘:

这里的缺陷是HTML是Chomsky Type 2语法(无上下文语法)而RegEx是Chomsky Type 3语法(正则表达式)

要么:

正则表达式只能匹配常规语言,但HTML是无上下文的语言.

要么:

有限自动机(它是正则表达式下面的数据结构)除了它所处的状态之外没有内存,如果你有任意深度的嵌套,你需要一个任意大的自动机,它与有限自动机的概念相冲突.

要么:

常规语言的Pumping引理是你不能这样做的原因.

[公平地说:以上大多数解释链接到维基百科页面,但这些并不比答案本身更容易理解].

所以我的问题是:有人可以提供一个外行人的上述正式解释的翻译,为什么不可能使用正则表达式来解析(X)HTML/XML?

编辑:在读完第一个答案之后,我认为我应该澄清:我正在寻找一个"翻译",它也简要地解释了它试图翻译的概念:在答案的最后,读者应该有一个粗略的想法 - 例如 - "常规语言"和"无语境语法"是什么意思......

regex language-agnostic

110
推荐指数
7
解决办法
2万
查看次数

Java:解析java源代码,解压缩方法

我希望解析java源代码文件,并提取方法源代码.

我需要一个像这样的方法:

/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来实现这一点,一个库来帮助我构建我的方法等等?

java parsing

48
推荐指数
2
解决办法
5万
查看次数

标签 统计

java ×1

language-agnostic ×1

parsing ×1

regex ×1