每当我看到任何正则表达式时,我总是害怕.我觉得很难理解.但恐惧不是解决方案.我决定开始学习正则表达式,所以有人可以告诉我如何才能开始吗?如果有任何简单的教程?
我有一个名为变量的变量$articleText,它包含html代码.有script和style内码<script>和<style>HTML元素.我想扫描$articleText并删除这些代码.如果我还可以删除实际的HTML元素<script>,</script>,<style>和</style>,我会做到这一点.
我想我需要使用正则表达式,但我不熟练.
有人可以帮忙吗?
我希望我能提供一些代码,但就像我说我不熟练的正则表达式,所以我没有任何东西可以显示.
我已经看过幽默的线程并阅读警告,我知道你不用正则表达式解析HTML.别担心...... 我不打算尝试它.
但是......这让我想问:HTML解析器是如何编码的(包括编程语言的内置函数,如DOM解析器和PHP的strip_tags)?他们使用什么机制来解析(有时是格式错误的)标记?
我找到了源的一个用JavaScript编码,它实际上使用正则表达式来完成这项工作:
// Regular Expressions for parsing tags and attributes
var startTag = /^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
endTag = /^<\/(\w+)[^>]*>/,
attr = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
Run Code Online (Sandbox Code Playgroud)
他们都这样做吗?是否有一种传统的标准方法来编写HTML解析器?
首先,我不能做任何事情,只能参考我认为最有名的SO帖子:
现在,它甚至是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
Run Code Online (Sandbox Code Playgroud)
Shell引用机制如此众多,以至于我只会在这种情况下创建一个Parboiled语法......但这是"出于我的勇气".因为我觉得它可能更容易......但这并不能证明这对正则表达式来说是不可行的.
以下是我从sitemap.xml获取的示例自定义标记
<url>
<loc>http://sitename.com/programming/php/?C=D;O=A</loc>
<changefreq>weekly</changefreq>
<priority>0.64</priority>
</url>
Run Code Online (Sandbox Code Playgroud)
有很多像这样的条目,如果你看到loc标签,它有c = d; 0 = a在最后.我想删除所有以<url>结尾开头的条目,</url>其中包含C = D; 0 = A或类似的模式.
以下表达式与上面指定的整个标记匹配
<url>(.|\r\n)*?<\/url>
Run Code Online (Sandbox Code Playgroud)
但我希望像上面声明中指定的那样匹配.
我们如何形成正则表达式来匹配这些条件(模式)?
该strip_tags()文件告诉我们,除了在第二个参数所有的标签被剥离.此函数执行的操作与其名称完全相反.应该已经命名了strip_all_tags_except().
让我们忘记这个名字,然后谈谈我想问的问题.我想要只删除我在第二个参数中提到的标签的功能.即.我希望以下内容删除标签<iframe><script><style><embed><object>并允许所有其他标签.
my_strip_tags($data,'<iframe><script><style><embed><object>');
Run Code Online (Sandbox Code Playgroud)
这与什么相反strip_tags().
我该如何实现这一目标?
我正在尝试使用正则表达式制作一个简单的基于 Python 的 HTML 解析器。我的问题是试图让我的正则表达式搜索查询找到所有可能的匹配项,然后将它们存储在一个元组中。
假设我有一个页面,变量中存储了以下内容HTMLtext:
<ul>
<li class="active"><b><a href="/blog/home">Back to the index</a></b></li>
<li><b><a href="/blog/about">About Me!</a></b></li>
<li><b><a href="/blog/music">Audio Production</a></b></li>
<li><b><a href="/blog/photos">Gallery</a></b></li>
<li><b><a href="/blog/stuff">Misc</a></b></li>
<li><b><a href="/blog/contact">Shoot me an email</a></b></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我想对这个文本执行正则表达式搜索并返回一个包含每个链接的最后一个 URL 目录的元组。所以,我想返回这样的东西:
pages = ["home", "about", "music", "photos", "stuff", "contact"]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以使用正则表达式来搜索一个结果:
pages = [re.compile('<a href="/blog/(.*)">').search(HTMLtext).group(1)]
Run Code Online (Sandbox Code Playgroud)
运行此表达式使pages = ['home'].
如何让正则表达式搜索继续整个文本,将匹配的文本附加到这个元组?
(注意:我知道我可能不应该使用正则表达式来解析 HTML。但无论如何我想知道如何做到这一点。)
我可以知道匹配html标签Test的正则表达式规则是什么
与标签SPAN匹配,无论其中的属性如何.
我现有的规则是这样,但不起作用.
/(<span [^>]*>)>/s
Run Code Online (Sandbox Code Playgroud)
谢谢.
我怀疑哪一个处理速度更快?
使用curl函数的dom文件或preg_match_all在html页面解析中更快?将dom文件功能留在其他服务器上如curl函数吗?例如,在curl函数中,我们使用用户代理来定义谁正在访问,但在dom文档中没有任何内容.
regex ×8
html ×3
parsing ×3
php ×3
dom ×1
html-parsing ×1
javascript ×1
jquery ×1
python ×1
xml ×1