首先,我不能做任何事情,只能参考我认为最有名的SO帖子:
RegEx match open tags except XHTML self-contained tags
现在,它甚至是StackOverflow的问题吗?我不知道,但我会试试……
我会从个人的角度讲.虽然我从来没有这样做,但我知道在我解析HTML的那一天,我肯定不会使用正则表达式;我将尝试找到一个HTML解析库.精细.
但我不知道为什么.
有一次,我决定用Java进行CSS验证.我知道“绝对”,正则表达式不会削减它,所以我用了Parboiled.
我不知道为什么.
“为什么”让我烦恼.我根本不是正规用法的新手.我只是不能在正则表达式引擎之间划清界限,也不能做.
我的问题如下:这条清晰的界限是什么?必须存在输入的基本特征,以便在数学上证明任何正则表达式引擎都无法可靠地确定成功和失败?
你能给出一个简单的理论输入,这个输入会使正则表达式引擎能够提供可靠的“匹配/不匹配”答案吗?如果是,这种输入的定义特征是什么?
编辑为了这个讨论,我将添加一个帖子在SO上建议的任务(我现在找不到链接,对不起),这比HTML简单,但我不会使用正则表达式:shell命令行解析.
就shell而言,这些是等价的:
alias ll="ls -l" alias ll=ls\ -l alias l"l"=ls' -'l "alia"s l"l= "ls\ -l
Shell引用机制如此之多,我只会在这种情况下创建一个Parboiled语法……
但这是“出于我的勇气”.因为我发现它可能更容易……
但这并不能证明这对正则表达式来说是不可行的.
正则表达式可以确定
regular languages.但HTML不是常规语言.它是
context-free language.无上下文语言是常规语言的超集.
原文链接:https://www.f2er.com/regex/356952.html基本上任何可以在其中具有递归元素的语言都不是常规的.常规语言必须“平坦”,因此不能嵌套.例如,在HTML中,一个< div>可以嵌套在另一个内部,并且它们可以嵌套的深度没有限制.正则表达式无法处理的是这种类型的通用嵌套.