开发者社区> 问答> 正文

php 正则表达式一个问题 400 请求报错 

 

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"不能用吗?

展开
收起
kun坤 2020-05-30 14:39:45 501 0
1 条回答
写回答
取消 提交回答
  • 看错了哈,引用不能放到字符组里没错,不过你转义了已经,所以问题不在这里。 问题在于你用的是双引号,\1表示的不是引用,它是个转义字符,匹配的是转义的十进制数字"\1"或"\001",就好比\n批评换行符一样。 双引号里面用引用,这么用:改成\g{1} 最好是用单引号:'/[(.)](.)[/\1]/U' 条件语句这样改一下:if(strtolower($matche[1])==='img')######

    引用来自“朱亚杰”的答案

    引用不能出现在字符组里面
    如果我想使用引用怎么办 ######/\[(.*)\](.*)\[\/\g{1}\]/U######

    引用来自“朱亚杰”的答案

    看错了哈,引用不能放到字符组里没错,不过你转义了已经,所以问题不在这里。 问题在于你用的是双引号,\1表示的不是引用,它是个转义字符,匹配的是转义的十进制数字"\1"或"\001",就好比\n批评换行符一样。 双引号里面用引用,这么用:改成\g{1} 最好是用单引号: '/\[(.*)\](.*)\[\/\1\]/U' 条件语句这样改一下:if(strtolower($matche[1])==='img')
    多谢了
    2020-05-30 14:39:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载