【问题标题】:regex code to select text of html file用于选择 html 文件文本的正则表达式代码
【发布时间】:2014-05-02 19:44:13
【问题描述】:

我需要选择 HTML 代码中的所有文本(但不包括标签)以向它们添加标签

我尝试与<[\/!a-zA-Z0-9]+(\s+\w+(=(\w+|(\"|').*(\"|')))?)*\s*\/?> 截然相反 像这样/^((?!<[\/!a-zA-Z0-9]+(\s+\w+(=(\w+|(\"|').*(\"|')))?)*\s*\/?>).)*$/ (link)

我要做的就是转换这个:

<!DOCTYPE html>
<html>
<body>
<h1>Heading</h1>
<div><p>paragraph.</p></div>
<p>paragraph.</p>
</body>
</html>

到这里:

<!DOCTYPE html>
<html>
<body>
<h1><span>Heading</span></h1>
<div><p><span>paragraph.</span></p></div>
<p><span>paragraph.</span></p>
</body>
</html>

请帮助.thx

【问题讨论】:

  • obligatory link(HTML不是正则语言,不应该用正则表达式解析)
  • 首先修复任何使 HTML 不是 XML 的有效子集的语法问题。然后使用 XML 解析器对其进行解析。正则表达式不起作用。

标签: php html regex preg-replace


【解决方案1】:

正如 Sam 所说,您不能使用正则表达式从 HTML 中可靠地读取值。如果您真的想从 HTML 中读取文本,那么您需要

  1. 修复任何使 HTML 不是 XML 的有效子集的语法问题。
  2. 然后使用 XML 解析器对其进行解析。正则表达式不起作用。

但是在再次阅读您的问题后,我发现您并不想阅读文本。您显然想要做的是在某些地方添加跨度,可以这样做。阅读每一行并申请:

$line = str_replace("<h1>", "<h1><span>", $line);
$line = str_replace("</h1>", "</span></h1>", $line);
$line = str_replace("<p>", "<p><span>", $line);
$line = str_replace("</p>", "</span></p>", $line);

当然,如果 HTML 开始时格式不正确,结果也不会。

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多