+ -
当前位置:首页 → 问答吧 → 奇怪的正则匹配替换

奇怪的正则匹配替换

时间:2010-01-08

来源:互联网

function replaceTag($content, $tagName){
    $content = preg_replace("/($tagName)/", "<a href='com.cn'>\\1</a>", $content);
    $content = preg_replace("/(<[img|IMG][^<>]+?)<a href='com.cn'>$tagName<\/a>/", '\\1'.$tagName, $content);
    return $content;
}

$str = '我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2太极转运鼠中国" >3中国';
echo replaceTag($str, '中国');

为什么结果是:
我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2太极转运鼠<a href='com.cn'>中国</a>" >3<a href='com.cn'>中国</a>
而不是:
我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1中国2太极转运鼠中国" >3<a href='com.cn'>中国</a>

作者: flymouse   发布时间: 2010-01-08

你替换了两次啊 当然就是这样了

作者: kickflip   发布时间: 2010-01-08

为什么alt里的内容只有第一个转换了呢

作者: flymouse   发布时间: 2010-01-08

function replaceTag($content, $tagName){
    $content = preg_replace("/($tagName)/", "<a href='com.cn'>\\1</a>", $content);
    //$content = preg_replace("/(<[img|IMG][^<>]+?)<a href='com.cn'>$tagName<\/a>/", '\\1'.$tagName, $content);
    return $content;
}

这样的时候结果是:我爱<img src="http://www.google.cn/intl/zh-CN/images/logo_cn.gif" alt="1<a href='com.cn'>中国</a>2太极转运鼠<a href='com.cn'>中国</a>" >3<a href='com.cn'>中国</a>
所以你第二个只匹配到第一个啊

作者: suniteboy   发布时间: 2010-01-08

相关阅读 更多