function ubb($matche) { if($matche[1]=='img' or $matche[1]=='IMG') return "<img src='".$matche[2]."'/>"; } $img = "img:[img]/sdfcs/sdfsdf/sdfsdf.jpg[/img],[url]http://www.oschina.net/[/url]"; $imghtml=preg_replace_callback("/\[(.*)\](.*)\[\/\1\]/U",ubb,$img); echo $imghtml;
我的本意是把[img]图片路径[/img]转成<img src=" 图片路径 " />;这段代码出错了 如果把pattern换成 /[(img)](.*)[img]/U ,就行。 谁能解释一下吗?是因为向后引用"\1"不能用吗?
看错了哈,引用不能放到字符组里没错,不过你转义了已经,所以问题不在这里。 问题在于你用的是双引号,\1表示的不是引用,它是个转义字符,匹配的是转义的十进制数字"\1"或"\001",就好比\n批评换行符一样。 双引号里面用引用,这么用:改成\g{1} 最好是用单引号:'/[(.)](.)[/\1]/U' 条件语句这样改一下:if(strtolower($matche[1])==='img')######
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。