当前位置:Gxlcms > PHP教程 > 关于preg_replace非常不解的事情?

关于preg_replace非常不解的事情?

时间:2021-07-01 10:21:17 帮助过:20人阅读

$thumbMark = '200x200';$thumb =$r['thumb'];echo $r['thumb'].'
'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg //$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';$r['thumb'] = preg_replace('/_\d+x\d+/', '_' . $thumbMark,$thumb);echo $r['thumb'].'
'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg


为何上述的替换函数无效,而如下给“$thumb”直接赋值,却能正常替换?

$thumbMark = '200x200';$thumb =$r['thumb'];echo $r['thumb'].'
'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';$r['thumb'] = preg_replace('/_\d+x\d+/', '_' . $thumbMark,$thumb);echo $r['thumb'].'
'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_200x200.jpg




回复讨论(解决方案)

var_dump($r['thumb']);
贴出结果

var_dump($r['thumb']);
贴出结果


string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"

块代码如:

while ($r = $db->fetch_array($result)) {
$r['adddate'] = timetodate($r['addtime'], 5);
$r['editdate'] = timetodate($r['edittime'], 5);

if ($lazy && isset($r['thumb']) && $r['thumb']) {
$thumbMark = '100x100';
if ($list == 1) {
$thumbMark = '200x200';
}
$thumb =$r['thumb'];
var_dump($r['thumb']);
//echo $r['thumb'].'
'; // http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg
//$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';
$r['thumb'] = preg_replace('/_\d+x\d+/', '_' . $thumbMark,$thumb);
//echo $r['thumb'].'
';


}

…………
}

检查 $list 的值

检查 $list 的值

if ($list == 1) {
$thumbMark = '200x200';
echo 'list:'.$list; // list:1
}

正常

没想到刚接触PHP就碰到怪问题了,难道是环境的问题?

发现一点端倪了,将正则“/_\d+x\d+/”中间的x去除之后,能正常替换,输出“http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_200x200x100.jpg”;

真是太奇怪了,这个“x”到底招谁惹谁了?

发现一点端倪了,将正则“/_\d+x\d+/”中间的x去除之后,能正常替换,输出“http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_200x200x100.jpg”;

真是太奇怪了,这个“x”到底招谁惹谁了?
那说明你的正则是有问题的

那为何直接赋值,如:
$thumb='http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg';

就没有问题。

从你给的东西来看看不出什么错误来 你在仔细调试下


var_dump($r['thumb']);
贴出结果


string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"
你这个字串只有76个字符,为何是string(85) ?

正则这种东西 搞不定的话 只能从源头开始了
$str = '_100x100.jpg';
echo preg_replace('/_/', '', $str);
echo preg_replace('/_\d+/', '', $str);
echo preg_replace('/_\d+x/', '', $str);
echo preg_replace('/_\d+x\d+/', '', $str);
看看哪个有问题 看懂的话就去试试吧...



var_dump($r['thumb']);
贴出结果


string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg"
你这个字串只有76个字符,为何是string(85) ?

这个真的很奇怪,最后用正则“/_\d+.{6}\d+/” 解决了。可能在php的函数中,“x”被生成的6个,不知名的东西。85-76=9,应该是9个吧,最后三个可能是数字。

已确定“x”被转换成其他的9个字符,可能是编码不同引起的

已确定“x”被转换成其他的9个字符,可能是编码不同引起的

更正一下,“x”被生成的6个是正确的,

string(85) "http://img2.com.cn/images/2014/038/422/14058002224830.9000001763_100x100.jpg",对于后面的字符人为的删除了3个

人气教程排行