求教PHP正则替换问题
发布网友
发布时间:2022-04-06 05:02
我来回答
共2个回答
热心网友
时间:2022-04-06 06:31
看了上楼的,怕前者又费脑细胞,又误人子弟,通配一些的方法,而不是写死:
<?php
function getval($str1 , $str2){
$data = array();
//正则所有中括号的标签,转换$str2为正则字符串
preg_match_all('/\[!--(.*)--\]/iUs',$str2,$res);
$preg=str_replace($res[0],"@#@#@",$str2);//先替换成@#@#@
$preg=preg_quote($preg);//转义正则字符
$preg=str_replace("@#@#@","(.*)",$preg);//然后再替换成正则通配字符
//正则获取对应的值
preg_match('/'.$preg.'/i',$str1,$res2);
if(!empty($res2)){
foreach($res[1] as $k=>$v){
$data[$v]=$res2[$k+1];//因为preg_match正则的值偏移1位,所以加一
}
}
return $data;
}
$str1 = 'tel is 123456 qq is 756324 my age is 20 and my name is ben';
$str2 = 'tel is [!--tel--] qq is [!--qq--] my age is [!--age--] and my name is [!--name--]';
//只要模板格式都是[!--str--]格式,都可以使用该函数
$rlt = getval($str1 , $str2);
print_r($rlt);
?>
另外返回的是tel,不是'tes'=>123456,好像写错了
热心网友
时间:2022-04-06 07:49
研究了一会写出来了,不采纳都对不起我死去的脑细胞,下面上代码,直接复制就能用
<?php
echo "<meta charset=utf-8>";
//因为正则处理简单,所以空格别忘了打
$str1 = 'tel is 123456 qq is 756324 my age is 20 and my name is ben';
//正则语句;
$preg = "/tel is ([0-9]+) qq is ([0-9]+) my age is ([0-9]+) and my name is ([a-z0-9A-Z]+)/";
//封装函数
function getval($str,$preg){
$arr = array();
if(@preg_match($preg, $str, $matches)) {
//之所以没有$matches[0] 是因为 $matches[0] 就是这个句子,也就是 $str;
$arr['tel']= $matches[1];
$arr['qq']= $matches[2];
$arr['age']= $matches[3];
$arr['name']= $matches[4];
}
return $arr;
}
//实际应用
$a = getval($str1,$preg);
print_r($a);
?>
追问你这种脑细胞死了就算了,我的意思是任意两个 字符型 参数就能返回要的结果..
我上面只是打比方,结果你都写死了...