我有一个类似的函数
function addMinus($string){
$output = str_replace("%20", "-", $string);
$output = str_replace(" ", "-", $output);
return $output;
}
我需要在下面的函数中使用上面给出的函数
function addgsk($string){
$regex = '~'(gsk:(.*?)')~six';
$link = "$1";
$link = addMinus($link);
$output = preg_replace($regex, "<a href='$link'>(gsk:$1)</a>", $string);
return $output;
}
但我的问题是$link = addMinus($link);
不起作用。空格不替换为"-"。我认为这是因为regex中的数据。
注意:我没有得到任何错误,但函数(addMinus)不起作用。
正则表达式可能有问题,但我们需要先知道实际要替换的模式。
无论哪种方式,现在$link
在regex出现之前已经分配了一个值$1
。告诉我这是否有帮助(如果没有,我们可以从中找出答案):
function addgsk($string){
$regex = '~'(gsk:(.*?)')~six';
$link = addMinus($string);
$output = preg_replace($regex, '<a href="' . $link . '">(gsk:$1)</a>', $string);
return $output;
}
这不起作用,因为不能使用像$1
这样的引用作为仅在preg_replace或preg_replace_callback的替换模式中定义的变量。当您编写$link = "$1";
时,引用$1
没有定义,当您调用addMinus时,较差的函数会尝试在这个文本字符串中查找空格:"$1"
解决问题的一种方法是使用preg_replace_callback,它允许在替换之前使用函数。请参阅官方文件:http://php.net/manual/en/function.preg-replace-callback.php
我不知道你想要什么数据,
function add_minus_gsk($string) {
return preg_replace_callback(
'@'(gsk:([^)]++)')@i',
function ($matches) {
return sprintf(
'<a href="%s">(gsk:%s)</a>',
str_replace(array('%20', ' '), '-', $matches[1]),
$matches[1]
);
},
$string
);
}
或
function add_minus_gsk($string) {
return preg_replace(
'@'(gsk:([^)]++)')@i',
'<a href="$1">(gsk:$1)</a>',
str_replace(array('%20', ' '), '-', $string)
);
}
两者都试试。