使用preg_replace获取$ _GET变量

时间:2016-02-07 18:50:30

标签: 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;
?>

该函数是suppost获取字符串并替换类似于: GET:foobar使用$_GET变量&#34; foobar&#34;。

2 个答案:

答案 0 :(得分:0)

改为使用preg_replace_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
?>

请参阅a demo on ideone.com

答案 1 :(得分:0)

我找到的唯一方法是将你的正则表达式分成两行(不是很漂亮,但它有效):

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;
}

eval.in demo

首先我搜索匹配模式,然后将替换用$_GET[found]值。

编辑:

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