Php 使用preg\u replace获取$\u get变量

Php 使用preg\u replace获取$\u get变量,php,regex,preg-replace,Php,Regex,Preg Replace,我创建了以下PHP函数: <?php function convertGET($str) { $regex = '/GET:+([a-zA-Z0-9_]+)/'; $str = preg_replace($regex, $_GET["$1"], $str); return($str); } $string = "foobar: GET:foobar"; $string = convertGET($string); echo $string; ?> 函数用

我创建了以下PHP函数:

<?php
function convertGET($str) {
    $regex = '/GET:+([a-zA-Z0-9_]+)/';
    $str = preg_replace($regex, $_GET["$1"], $str);
    return($str);
}
$string = "foobar: GET:foobar";
$string = convertGET($string);
echo $string;
?>

函数用于获取字符串并替换以下内容:
GET:foobar
使用
$\u GET
变量“foobar”。

使用
preg\u replace\u callback()

<?php
$input = array("foobar" => "Some other string");

$regex = '~GET:([a-zA-Z0-9_]+)~';
$string = "foobar: GET:foobar";
$string = preg_replace_callback($regex,
    function($matches) use ($input) {
        return $input[$matches[1]];
    },
    $string);
echo $string;
// output: foobar: Some other string
?>


请参阅。

我发现的唯一方法是将正则表达式拆分为两行(这不是一种很好的方法,但它很有效):

首先我搜索匹配模式,然后应用替换为
$\u GET[found]

编辑:
添加了
$valueOnly
参数:如果设置为
True
,则只返回
$\u GET
变量的值。

出于某种原因,只有在代码中设置GET变量而不抛出URL时,它才起作用。我该怎么办?@shanidahan你有没有仔细检查过$u GET设置好了?在函数前面放一个
var\u dump($\u GET)
。好的,它在我制作的一个文件中工作,但在另一个文件中,它读取一个XML文件(包含文件内容)和echo convertGET(文件内容(“file.XML”))它不工作。(在一些XML标记中,有一个值:GET:something,它只是将标记保留为空。@shanidahan你能发布该文件的url吗?我已经测试了脚本,它对我有效
function convertGET( $str, $valueOnly=False )
{
    $regex = '/GET:+([a-zA-Z0-9_]+)/';
    preg_match( $regex, $str, $matches);
    if( $valueOnly ) return $_GET[$matches[1]];
    $str = preg_replace($regex, $_GET[$matches[1]], $str);
    return $str;
}