我刚刚开始学习PHP中的正则表达式,但我在学习WWW上的一些教程时遇到了很糟糕的情况,似乎找不到任何能满足我当前需求的东西。也许我试图学得太多太快了。PHP的这一方面对我来说是全新的。
我尝试创建的是一个正则表达式,用我选择的任何代码替换第n次出现的和之间的所有HTML代码。
我的最终目标是在PHP中制作一个互联网过滤器,通过它我可以查看网页中任何指定的标签集之间的特定内容(或替换为经过消毒的内容)……在页面中,其中...表示任何有效的成对HTML标记,例如...或者..。或者...等等。
例如,如果页面有一个色情广告包含在第五个...代码块,那么可以调用什么正则表达式来将该代码替换为其他代码,比如xxxxxxx,而不是页面中的第5个代码块?
整个网页包含在单个文本字符串中,并且过滤结果也应该是单个文本字符串。
我不确定,但我认为执行此操作的代码可能具有类似以下的格式:
$FilteredPage = preg_replace("REG EXPRESSION", "xxxxxxxx", $OriginalPage);要调用的"REG EXPRESSION“是我需要知道的,而"xxxxxxxx”表示替换"REG EXPRESSION“目标标签之间的代码的文本。
正则表达式显然是撒旦的杰作!
任何一般性的建议,或者可能是几个我可以研究和试验的工作示例,都将非常感谢。
谢谢,杰伊
发布于 2011-01-29 14:23:25
这已经做死了,但请不要使用正则表达式来解析HTML。停下来,放弃..。这是不值得的小猫,上帝会杀了你这样做。使用真正的HTML或XML解析器
从更有建设性的角度来看,xpath是一种更适合描述您可能想要替换的html节点的技术……或者phpQuery和QueryPath
当你用正则表达式解析时,上帝杀死小猫的原因:
html不是一种常规语言,因此正则表达式只能解析非常有限的Html。HTML是一种上下文无关语言,因此只有使用上下文无关解析器才能正确解析。
编辑:谢谢你@Andrew Grimm,这比我说的要好得多,正如第一个答案所证明的那样,有4000多个赞成票!
发布于 2011-01-29 14:33:10
首先,你是否使用了合适的工具来完成这项工作?Regex是一个文本匹配引擎,而不是一个成熟的解析器-也许专用的HTML解析器会提供更好的结果。
其次,当处理任何编程问题时,试着简化你的问题,一砖一瓦地构建它,而不是直接跳到最终的解决方案。例如,您可以:
从一个简单的普通英文文本块开始,尝试匹配并替换(例如)出现的每个单词" and“。
当它起作用时,将其封装在PHP循环中,该循环最多可以计数到5,并且只能替换出现的第5次。既然PHP在这方面的表现要好得多,为什么还要使用正则表达式呢?
然后修改您的正则表达式以匹配您的第五个HTML标记(这有点困难,因为<>是特殊字符,需要进行转义)
通过分步解决问题,您将能够使每个部分依次工作,并构建您理解的可靠解决方案。
https://stackoverflow.com/questions/4835460
复制相似问题