我尝试从字符串替换字符并放入其他字符,为此使用preg_replace_callback函数,问题是此函数更改原始文本的顺序并显示不同的结果
例如,如果字符串为:
大家好[1-2-3]这是一个测试[4-5-6-7-8] --->原文:
脚本搜索[]并将此内容与其他文字中的[]分开,但显示我放在这里:
1-2-3 4-5-6-7-8大家好,这是一个测试--->坏结果
如果没有[]
,那么正确的顺序就是第一个大家好1-2-3这是一个测试4-5-6-7-8
我创建的脚本:
<?php
$text = " This is a test [gal~ruta~100~100] This is other test [gal~ruta2~100~100]";
function gal($matches)
{
global $text;
$exp=explode("~",$matches[1]);
$end=str_replace($matches[1],$a,$text);
if ($exp[0]=="gal")
{
$a="".$exp[1]."".$exp[2]."".$exp[3]."";
echo $a;
}
}
echo preg_replace_callback(
"/\[(.*?)\]/",
"gal",
$text);
?>
感谢大家的帮助
答案 0 :(得分:1)
您需要从回调中返回一些内容,该回调将在原始字符串中替换。你当然不希望echo
,它将按执行顺序将值直接发送到输出。
但是,听起来你甚至不需要回调函数来删除数字周围的括号。
$str = preg_replace("/\[(.*?)\]/", "$1", $str);