我需要一个reg exp(用于执行preg_replace)来查找具有<font>
属性的所有style="..."
标记...
问题是我只需要将<font>
与样式属性和值
"height: 0;overflow: hidden;width: 0; position: absolute;"...
另一个问题,style属性可能处于不同的位置;
离。
<font color="white" style="height: 0;overflow: hidden;width: 0; position: absolute; font-family:courier; font-size:10px" >
或
<font style="height: 0;overflow: hidden;width: 0; position: absolute; font-family:tahoma; font-size:14px" color="red" >
编辑:解决它:
#</?font [^>]*\bheight: 0;overflow: hidden;width: 0; position: absolute;[^>]* >(.+</font[^>]*>|)#is
(找到具有该样式的标签及其包含的所有内容)
preg_replace()中的reg exp似乎有效!!
答案 0 :(得分:3)
您可以使用以下XPath表达式获取所有<font>
标记(假设您的HTML文档格式正确):
//font[@style='height: 0;overflow: hidden;width: 0; position: absolute;']
在PHP中,有许多方法可以在文档上运行XPath表达式,例如this one。
如果您的HTML格式不正确,您可以使用HTML解析器,例如this one that I just found。它支持类似JQuery的选择器,因此您可以使用以下表达式找到您的元素:
font[style*='height: 0;overflow: hidden;width: 0; position: absolute;']
我必须警告你不要使用Jens的解决方案,因为试图用正则表达式解析HTML是一个进入纯粹恶意疯狂的黑暗深渊的旅程。 HTML是一种嵌套的递归结构。就其本质而言,正则表达式无法处理这种递归。虽然您可能能够创建一个看起来很有效的表达式,但肯定会有一些有效的案例或者与之不相符的案例。我恳请您使用实际的基于DOM的解析器。
答案 1 :(得分:1)
如果您确定您的HTML足够好,可以被Regex访问(即没有评论,没有格式错误,样式css不包含注释,......)并且只想匹配开始标记(嵌套是一个没有正则表达式,你可以尝试
<font [^>]*\bstyle="([^"]*)"[^>]*>
此正则表达式将每个font-tag与style属性匹配,并在其唯一的捕获组中包含此属性的值。
编辑:也许我误解了这个问题。如果您需要将style属性设置为您指定的值,请使用
<font [^>]*\bstyle="height: 0;overflow: hidden;width: 0; position: absolute;"[^>]*>