我做了以下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;。
答案 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
?>
答案 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
变量的值。