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。
所以我需要重写一些我在库中找到的旧代码。
$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。