Php preg_replace_callback没有工作我

时间:2012-11-28 04:17:02

标签: php str-replace preg-replace-callback

我尝试从字符串替换字符并放入其他字符,为此使用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);

?>

感谢大家的帮助

1 个答案:

答案 0 :(得分:1)

您需要从回调中返回一些内容,该回调将在原始字符串中替换。你当然不希望echo,它将按执行顺序将值直接发送到输出。

但是,听起来你甚至不需要回调函数来删除数字周围的括号。

$str = preg_replace("/\[(.*?)\]/", "$1", $str);

CodePad