在没有关于解析(X)HTML或XML并且询问正则表达式的问题的情况下,SO上没有任何日子.
虽然相对容易想出用于演示此任务的正则表达式的不可行性的示例或用表达概念的表达式集合,我仍然无法在SO上找到为什么在外行人中无法做到这一点的正式解释条款.
到目前为止我在这个网站上找到的唯一正式解释可能非常准确,但对于自学成才的程序员来说也很神秘:
这里的缺陷是HTML是Chomsky Type 2语法(无上下文语法)而RegEx是Chomsky Type 3语法(正则表达式)
要么:
正则表达式只能匹配常规语言,但HTML是无上下文的语言.
要么:
有限自动机(它是正则表达式下面的数据结构)除了它所处的状态之外没有内存,如果你有任意深度的嵌套,你需要一个任意大的自动机,它与有限自动机的概念相冲突.
要么:
常规语言的Pumping引理是你不能这样做的原因.
[公平地说:以上大多数解释链接到维基百科页面,但这些并不比答案本身更容易理解].
所以我的问题是:有人可以提供一个外行人的上述正式解释的翻译,为什么不可能使用正则表达式来解析(X)HTML/XML?
编辑:在读完第一个答案之后,我认为我应该澄清:我正在寻找一个"翻译",它也简要地解释了它试图翻译的概念:在答案的最后,读者应该有一个粗略的想法 - 例如 - "常规语言"和"无语境语法"是什么意思......
我认识的人一直在告诉我应该避免RegEx,因为它是重量级的或者涉及繁重的处理.这是真的?这让我耳边鼓掌,直到现在我的耳膜响了起来.
我不知道为什么他告诉我.它可能来自经验还是仅仅是三手资料(你知道我的意思......)?
所以,明白地说,我为什么要避免使用正则表达式?
我希望SO社区的主人提供信息,与我分享他们的想法.多谢你们!
在C#中使用正则表达式,有没有办法在包含各种单词和符号的字符串中查找和删除重复的单词或符号?
防爆.
初始字串:
"我喜欢环境.环境很好."
所需的字符串:
"我喜欢环境.很好"
删除了重复项: "the","environment","."
我很久以前就问过这个问题,我希望我已经阅读过如何在C#(或Java,C++等)中不使用Regex 的答案 !
我希望使用Regex(正则表达式)来获取C#源代码中所有字符串的列表,包括嵌入了双引号的字符串.
这应该不会很难,但是在我花时间尝试构建正则表达式之前,有没有人有一个"预制"的表达式?
这并不像第一次那样容易
我使用以下正则表达式来获取HTML文档中src第一个img标记的值.
string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?"
Run Code Online (Sandbox Code Playgroud)
现在它捕获src了我不需要的总属性.我只需要src属性中的url .怎么做?