注册 登录
编程论坛 PHP技术论坛

Discuz可以这样使用,为什么我不行?

redice 发布于 2009-12-22 16:08, 1249 次点击
程序代码:
// 以下代码摘自Discuz 7 的discuzcode.func.php文件部分代码

if(strpos($msglower, '[/email]') !== FALSE) {
            $message = preg_replace("/\[email(=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+))?\](.+?)\[\/email\]/ies", "parseemail('\\1', '\\4')", $message);
        }


function parseemail($email, $text) {
    if(!$email && preg_match("/\s*([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\s*/i", $text, $matches)) {
        $email = trim($matches[0]);
        return '<a href="mailto:'.$email.'">'.$email.'</a>';
    } else {
        return '<a href="mailto:'.substr($email, 1).'">'.$text.'</a>';
    }
}

为什么我仿照那样使用却不行呢?
程序代码:
// 下面是我的代码,请将【换成"[",】换成"]"
<?php
echo $message = preg_replace("/\[email=(([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+))?\](.+?)\[\/email\]/is", "parseemail('\\1','\\4')","【email=redice@】redice【/email】");

function parseemail($email, $text) {
    if(!$email && preg_match("/\s*([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\s*/i", $text, $matches)) {
            $email = trim($matches[0]);
            return '<a href="mailto:'.$email.'">'.$email.'</a>';
    } else {
            return '<a href="mailto:'.substr($email, 1).'">'.$text.'</a>';
   }
}
?>


程序输出为: parseemail('redice@','redice')


不要告诉我让我把"parseemail('\\1','\\4')"的双引号去掉。  


在线等高手指点




[ 本帖最后由 redice 于 2009-12-22 21:50 编辑 ]
5 回复
#2
redice2009-12-22 18:43
  为什么每人关注呢??
#3
redice2009-12-22 21:46
救命啊 救命啊
#4
外部三电铃2009-12-22 22:07
原本想实现什么功能?结果出现什么错误?
#5
redice2009-12-23 10:58
回复 4楼 外部三电铃
本来想和DZ一样能够自动执行字符串中的函数。
#6
redice2010-06-07 18:40
回复 楼主 redice
今天终于搞清楚了,哈哈哈

preg_replace函数原型:


mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

特别说明:

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。


http://www.
1