所以我需要重新编写一些我在库中找到的旧代码。
$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>
你能帮助我澄清一下,如果我的代码做得好吗?
答案 0 :(得分: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。