我有一个类似下面的功能
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);
不起作用。空格不会被&#34; - &#34;取代。我认为这是因为来自正则表达式的数据。
注意:我没有收到任何错误,但函数(addMinus)不起作用。
答案 0 :(得分:0)
这不起作用,因为您不能使用$1
之类的引用作为仅在preg_replace或preg_replace_callback的替换模式中定义的变量。当您编写$link = "$1";
时,未定义引用$1
,并且当您调用 addMinus 时,较差的函数会尝试在此文字字符串中查找空格:"$1"
< / p>
解决问题的一种方法是使用preg_replace_callback,它允许在替换之前使用函数。请参阅官方文档:http://php.net/manual/en/function.preg-replace-callback.php
答案 1 :(得分:0)
这可能是正则表达式的一个问题,但我们需要先了解您实际想要替换的模式。
无论哪种方式,现在$link
在正则表达式发生之前都会为其分配值$1
。告诉我这是否有帮助(如果没有,我们可以从那里弄清楚):
function addgsk($string){
$regex = '~\(gsk:(.*?)\)~six';
$link = addMinus($string);
$output = preg_replace($regex, '<a href="' . $link . '">(gsk:$1)</a>', $string);
return $output;
}
答案 2 :(得分:0)
我不知道你想要哪些数据,
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)
);
}
尝试两种方法。