在没有关于解析(X)HTML或XML并且询问正则表达式的问题的情况下,SO上没有任何日子.
虽然相对容易想出用于演示此任务的正则表达式的不可行性的示例或用表达概念的表达式集合,我仍然无法在SO上找到为什么在外行人中无法做到这一点的正式解释条款.
到目前为止我在这个网站上找到的唯一正式解释可能非常准确,但对于自学成才的程序员来说也很神秘:
这里的缺陷是HTML是Chomsky Type 2语法(无上下文语法)而RegEx是Chomsky Type 3语法(正则表达式)
要么:
正则表达式只能匹配常规语言,但HTML是无上下文的语言.
要么:
有限自动机(它是正则表达式下面的数据结构)除了它所处的状态之外没有内存,如果你有任意深度的嵌套,你需要一个任意大的自动机,它与有限自动机的概念相冲突.
要么:
常规语言的Pumping引理是你不能这样做的原因.
[公平地说:以上大多数解释链接到维基百科页面,但这些并不比答案本身更容易理解].
所以我的问题是:有人可以提供一个外行人的上述正式解释的翻译,为什么不可能使用正则表达式来解析(X)HTML/XML?
编辑:在读完第一个答案之后,我认为我应该澄清:我正在寻找一个"翻译",它也简要地解释了它试图翻译的概念:在答案的最后,读者应该有一个粗略的想法 - 例如 - "常规语言"和"无语境语法"是什么意思......
我有一个java字符串,它有一个可变长度.
我需要将这个片段"<br>"放入字符串中,比方说每10个字符.
例如,这是我的字符串:
`this is my string which I need to modify...I love stackoverlow:)`
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得这个字符串?:
`this is my<br> string wh<br>ich I nee<br>d to modif<br>y...I love<br> stackover<br>flow:)`
Run Code Online (Sandbox Code Playgroud)
谢谢
很明显,有很多问题看起来像一个简单的正则表达式将解决,但事实证明,使用正则表达式很难解决.
那么,不是正则表达式专家的人怎么知道他/她是否应该学习正则表达式来解决给定的问题?
(请参阅"正则表达式解析C#源代码以查找所有字符串",以便我提出这个问题.)
这似乎总结得很好:
(我刚刚更改了问题的标题以使其更具体,因为在C#中使用Regex的一些问题在Perl和JScript中得到了解决,例如,两个引用级别使Regex难以理解.)
我正在尝试使用 jQuery 生成链接,并且需要修剪最后的“+”号。有没有办法检测那里是否有一个,然后将其修剪掉?
到目前为止,代码删除了“酒店”这个词并用“+”替换了空格,我想我只需要另一个替换有时会出现的“+”,但不确定如何对其进行超级具体。
var nameSearch = name.replace("Hotel", "");
nameSearch = nameSearch.replace(/ /g, "+");
Run Code Online (Sandbox Code Playgroud)