Php str#u将标记中的空格替换为连字符';s名称属性

Php str#u将标记中的空格替换为连字符';s名称属性,php,regex,preg-replace,Php,Regex,Preg Replace,$string=preg#u replace(“#[名称=([a-zA-Z0-9.-]+)*]#”,“'.$1”,“$string”) 脚本的这一部分不起作用: str_replace(' ', '-', "$1") 我需要将“”替换为“-”, 我还尝试在mainpreg\u replace内部进行preg\u replace,str\u ireplace 但这仍然不起作用更换是预先评估的,而不是每次更换。但是,您可以使用以下方法之一: 我想您必须分两步完成,因为str_replace()中不

$string=preg#u replace(“#[名称=([a-zA-Z0-9.-]+)*]#”,“'.$1”,“$string”)

脚本的这一部分不起作用:

str_replace(' ', '-', "$1")
我需要将“”替换为“-”, 我还尝试在main
preg\u replace
内部进行
preg\u replace
str\u ireplace


但这仍然不起作用

更换是预先评估的,而不是每次更换。但是,您可以使用以下方法之一:


我想您必须分两步完成,因为
str_replace()
中不能使用
$1
$1
实际上不作为变量存在,它只是替换字符串中的占位符

$string = preg_replace("#\[name=([a-zA-Z0-9 .-]+)*]#e", '"<td><a href=\"$front_page/".str_replace(" ", "-", "$1")."\">$1</a></td>"', $string);
function callbackFunction($match) {
    global $front_page;
    return '<td><a href="'.$front_page.'/'.str_replace(" ", "-", $match[1]).'">'.$match[1].'</a></td>';
}
$string = preg_replace_callback("#\[name=([a-zA-Z0-9 .-]+)*]#", 'callbackFunction', $string);