2017-04-25 64 views
2

所以我需要重新编写一些我在库中找到的旧代码。Preg替换回调验证

$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> 

你们可以帮我在这里有一个明确的数据,如果我的代码完成正常吗?

回答

1

$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

+1

谢谢!我会尽快接受这个答案。 – Uffo