Preg 替换回调验证

Preg replace callback validation

所以我需要重写一些我在库中找到的旧代码。

    $text = preg_replace("/(<\/?)(\w+)([^>]*>)/e",
                         "'\1'.strtolower('\2').'\3'", $text);

    $text = preg_replace("/<br[ \/]*>\s*/","\n",$text);
    $text = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n",
                         $text);

对于第一个我试过的是这样的:

 $text = preg_replace_callback(
   "/(<\/?)(\w+)([^>]*>)/",
   function($subs) {
       return strtolower($subs[0]);
   },
   $text);

我有点困惑b/c我不明白这部分:"'\1'.strtolower('\2').'\3'"所以我不确定我应该用什么来代替它。

据我所知,第一行查找标签,并将它们设为小写,以防我有

这样的数据
<B>FOO</B>

你们能帮我澄清一下吗?我的代码是否正确完成?

$subs 是一个数组,包含第一项中的整个值和后续项中的捕获文本。因此,第 1 组在 $subs[1] 中,第 2 组值在 $subs[2] 中,等等。$subs[0] 包含整个匹配值,并且您将 strtolower 应用于它,但是原始代码完整保留第 3 组值(用 ([^>]*>) 捕获,也可能包含大写字母)。

使用

$text = preg_replace_callback("~(</?)(\w+)([^>]*>)~", function($subs) {
    return $subs[1] . strtolower($subs[2]) . $subs[3]; 
 }, $text);

参见PHP demo