PHP替换除HTML标记之外的字符

时间:2015-04-30 16:38:31

标签: 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">,而我只需要替换正文中的数字而不是标记。< / p>

包含数字的代码是表格标记的<h0><h1><h2><h3><h4><h5><h6>cellspacing以及cellpaddingborder

如何使用上述符号替换数字,但不会影响<h0><h1><h2><h3><h4><h5><h6>cellspacing以及cellpaddingborder

1 个答案:

答案 0 :(得分:4)

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

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

<强> Working demo

这个正则表达式背后的想法是跳过<...>中的任何内容,但与其余内容相匹配。因此,它只会匹配不在html标记内的数字1。我再一次使用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);