【发布时间】:2014-03-12 09:27:40
【问题描述】:
首先,我想说的是,我不会尝试用正则表达式解析HTML,所以不建议我使用PHP DOM,但是我尝试使用它,但在我的情况下是PHP @987654322 @ 弄乱最后的 HTML 标记,因为 in 包含内联 JavaScript 和 jQuery 动态标签生成和/或内容替换,例如:
$("#status-message").show(200).html("<div style=''>...</div>")
将内联 JavaScript/jQuery 代码从输入 HTML 字符串移动到外部 .js 文件以供包含是不是一个选项(尽管这可能 用 PHP DOMDocument 解决问题。
通过使用 PHP DOMDocument,最终标记在 saveHTML() 方法(当然会产生无效代码)上被 entities 替换,例如:
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
这就是尝试从输入 HTML 字符串中仅匹配给定标签 ** 与 **regex 的原因,将其删除并返回修改后的 HTML 字符串(输入 @ 987654337@ 字符串在大多数情况下可能是有效的HTML)。
到目前为止,这是我使用 regex 的代码:
<?php
$html = "<html>
<head>
<link rel='stylesheet' type='text/css' href='http://www.example.com/themes/css.min.css'>
</head>
<!-- A LOT OF STUF HERE--></html>";
//The URL
$url = preg_quote("http://www.example.com/themes/css.min.css");
//The pattern
$pattern = "~<link\s+[href=".$url."][^>]*>~i";
//The output
$output = preg_replace($pattern, "", $html);
?>
我正在尝试匹配
<head>或<body>部分中的给定<link>(不区分大小写)标记(即使它在放置在@987654343 中时标记无效@) 具有给定的href属性,等于给定的 URL。-
李>href属性的位置可以在标签中的任何位置,<link>标签也可以是自闭合的,也可以不是(即必须全部匹配)。 -
我不在乎
<link>标记中是否有超过 1 个href属性(尽管这也是无效标记)(即它们都必须匹配).. 我不在乎是否有超过 1 个具有相同
href属性的<link>标记(即它们都必须匹配)。href属性的内容可以用单引号、双引号或不加引号来引用,或者,即使是无效的标记也可能会遗漏一个引号,或者混合使用单引号/双引号/无引号(即所有引号都必须匹配)。
有效匹配示例:
<link rel="stylesheet" type="text/css" href="http://www.example.com/themes/css.min.css">
<link href='http://www.example.com/themes/css.min.css">
编辑(新的有效示例):
<LinK href=http://www.example.com/themes/css.min.css />
<link
href=http://www.example.com/themes/css.min.css />
这几天让我发疯,我们将不胜感激。
【问题讨论】: