PHP 替换 HTML 标签以外的字符

标签 php regex string replace html-parsing

我需要替换字符 0,1,2,...,9\xD9\xA0,\xD9\xA1,\xD9\xA2,...,\xD9\xA9在一个字符串中。该字符串来自 CKEditor,因此它可能包含 html 标签。使用以下代码

$body = str_replace("1", "\xD9\xA1", $body);

它会替换每个 1\xD9\xA1所以它会影响标签 <h1>还有<table border="1">而我只需要替换正文中的数字而不是标签。

包含数字的标签是<h0><h1><h2><h3><h4><h5><h6>cellspacingcellpaddingborder表格标签。

如何在不影响 <h0><h1><h2><h3><h4><h5><h6> 的情况下用上述符号替换数字和 cellspacingcellpaddingborder

最佳答案

你不应该使用正则表达式来处理 html,但是如果你仍然想使用正则表达式,你可以像这样使用带有正则表达式的丢弃模式:

<.*?>(*SKIP)(*FAIL)|1

Working demo

这个正则表达式背后的想法是跳过 <...> 中的任何内容但匹配其余部分。所以,它只会匹配数字 1不在 html 标签内。再一次,我会改用 html 解析器。

PHP代码

$re = "/<.*?>(*SKIP)(*FAIL)|1/"; 
$str = "<h0><h1><h2><h3>\n<table border=\"1\">\n1\n"; 
$subst = "\xD9\xA1"; 

$result = preg_replace($re, $subst, $str);

关于PHP 替换 HTML 标签以外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973267/

相关文章:

regex - "inconsistent"在正则表达式中使用代码块时的匹配结果 [Raku]

python - 用正则表达式替换所有 html 标签属性

regex - R - 使用正则表达式,在字符串中的第 n 个点之前设置位置并删除后面的内容

php - 如何调试执行线

php - Laravel- 在多个表中搜索一个 ID

php - 使用 mPDF 从数据库调用行

c - Strcmp 在相等的字符串上不返回相等

php - 如何在 PHP 中创建函数字典?

javascript - 返回 JavaScript 字符串中的哈希值和加号数

c# - 将 String.Empty 发送到存储过程