Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将正则表达式数据转换为全局字符串php_Php_Regex - Fatal编程技术网

如何将正则表达式数据转换为全局字符串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减号
函数会发生什么?Ie
EchoAdd减号('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)
    );

}