如何将正则表达式数据转换为全局字符串php
我有一个如下的函数如何将正则表达式数据转换为全局字符串php,php,regex,Php,Regex,我有一个如下的函数 function addMinus($string){ $output = str_replace("%20", "-", $string); $output = str_replace(" ", "-", $output); return $output; } 我需要在下面的函数中使用上面给出的函数 function addgsk($string){ $regex = '~\(gsk:(.*?)\)~six'; $link = "$1"
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;
}
函数addgsk($string){
$regex=“~\(gsk:(.*)\)~six”;
$link=“$1”;
$link=add减去($link);
$output=preg_replace($regex,“,$string);
返回$output;
}
但我的问题是,$link=add减号($link)代码>不工作。空格不替换为“-”。我认为这是因为regex的数据
注意:我没有收到任何错误,但是函数(add减号)不起作用。这不起作用,因为您不能使用像$1
这样的引用作为变量,它仅在preg\u replace或preg\u replace\u回调的替换模式中定义。当您写入$link=“$1”
未定义引用$1
,当您调用add减号时,糟糕的函数会尝试在这个文本字符串中查找空格:“$1”
解决问题的一种方法是使用preg_replace_回调,该回调允许在替换之前使用函数。请参阅官方文档:正则表达式可能有问题,但我们需要先了解实际要替换的对象的模式
无论哪种方式,现在在正则表达式出现之前,$link
已经为它分配了一个值$1
。告诉我这是否有帮助(如果没有,我们可以从那里找到答案):
函数addgsk($string){
$regex=“~\(gsk:(.*)\)~six”;
$link=add减号($string);
$output=preg_replace($regex,,,$string);
返回$output;
}
我不知道您需要哪些数据
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
);
}
函数add\u减\u gsk($string){
返回preg_replace_回调(
“@\(葛兰素史克:([^)]++\)@i”,
函数($matches){
回程冲刺(
'',
str_replace(数组('%20',''),'-',$matches[1]),
$matches[1]
);
},
$string
);
}
或
函数add\u减\u gsk($string){
返回预更换(
“@\(葛兰素史克:([^)]++\)@i”,
'',
str_replace(数组('%20',''),'-',$string)
);
}
两种都试试。如果只单独使用add减号
函数会发生什么?IeEchoAdd减号('website page.php')代码>?它将打印网站页面。php
我修改了它,它工作正常,谢谢。)如果有人有同样的问题,在修改中,我只使用php的一些基本功能,即substr
,strlen
,trim
。
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)
);
}