2

我有以下用小写字母替换大写 HTML 标记。

$output = preg_replace("%<(/?[A-Z].*?)>%s",strtolower('$1'),$output);

匹配似乎运行良好(在我的 RegEx 测试站点中),但替换不是。

<EM>TEST</EM> becomes EMTEST/EM

希望有人能指出我正确的方向。

4

2 回答 2

3

您正在调用strtolower"$1"然后使用结果(又是$1一次)来替换。

相反,使用preg_replace_callback并让回调为:function($m) {return strtolower($m[0]);}

于 2012-04-26T03:47:23.253 回答
1
$output = preg_replace("%<(/?[A-Z].*?)>%se", "'<' . strtolower('\\1') . '>'",$output);

编辑:忘了提到你不应该使用HTMLpreg东西 :) DOMDocument 是一个更好的选择。

于 2012-04-26T03:59:35.067 回答