preg_replace,preg_match问题,请帮忙看看

kzdg2006 2015-01-22 09:30:08
最近想调用一个发送邮件的函数,于是在网上下载了一个smtp_mail.php的函数,函数编写的php版本比较低,都用的是ereg,ereg_replace.但是我现在的PHP版本比较高,因此需要用preg_match代替ereg,preg_replace代替ereg_replace,代替之后出现warning,由于之前也没用怎么学过正则表达式,麻烦大牛帮忙修改一下。

修改之前:$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
修改之后:$body = preg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
Warning: preg_replace(): Unknown modifier '(' in ......

$response = str_replace("\r\n", "", fgets($this->sock, 512));
修改之前:if (!ereg("^[23]", $response))
修改之后:if (!preg_match("^[23]", $response))
Warning: preg_match(): No ending delimiter '^' found in ......

$comment = "\([^()]*\)";
修改之前:ereg($comment, $address)
修改之后:preg_match($comment, $address)
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in......

修改之前:$address = ereg_replace("([ \t\r\n])+", "", $address);
修改之后:$address = preg_replace("([ \t\r\n])+", "", $address);
Warning: preg_replace(): Unknown modifier '+' in ......

修改之前:$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);
修改之后:$address = preg_replace("^.*<(.+)>.*$", "\1", $address);
Warning: preg_replace(): No ending delimiter '^' found in ......
...全文
399 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
anymorelj001 2015-04-22
  • 打赏
  • 举报
回复
发邮件的类 网上一大堆
晴了_冰 2015-04-21
  • 打赏
  • 举报
回复
请问你解决了 smtp发送邮件这个问题了吗?我现在遇到了同样的问题,求解答
kzdg2006 2015-01-23
  • 打赏
  • 举报
回复
@xuzuning @jam00 嗯,已经加了定界符,不报错了,但是邮件发不出去了。修改之前邮件时可以发送出去的,会提示发送成功,但是修改之后,虽然没有帖子中的报错信息,但是提交之后页面就空白了,卡死了,没有提示发送成功,也收不到邮件。应该还是帖子中的这几行代码有问题,麻烦再帮忙看看这几句,是不是和修改之前的意思不一样了。实在不懂正则语句,学习起来有点费时间,但是又急着用,多谢了!!! 修改之前:$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body); 修改之后:$body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body); //加了定界符 $response = str_replace("\r\n", "", fgets($this->sock, 512)); 修改之前:if (!ereg("^[23]", $response)) 修改之后:if (!preg_match("/^[23]/", $response)) //加了定界符 $comment = "/\([^()]*\)/"; //加了定界符 修改之前:ereg($comment, $address) 修改之后:preg_match($comment, $address) 修改之前:$address = ereg_replace("([ \t\r\n])+", "", $address); 修改之后:$address = preg_replace("/([ \t\r\n])+/", "", $address); //加了定界符 修改之前:$address = ereg_replace("^.*<(.+)>.*$", "\1", $address); 修改之后:$address = preg_replace("/^.*<(.+)>.*$/", "\1", $address); //加了定界符
果酱很好吃 2015-01-23
  • 打赏
  • 举报
回复
要用 / / 定义正则表达式的边界,如: preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body);
xuzuning 2015-01-23
  • 打赏
  • 举报
回复
preg 的正则表达式需要有定界符(ereg的不需要) 修改之后:$body = preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $body); 其他类同
kzdg2006 2015-01-23
  • 打赏
  • 举报
回复
好吧,但是我修改之前是可以正常发送邮件的,就是修改了帖子中的那几行语句:把ereg修改为preg,所以现在的版本是发送不了邮件的了。所以我怀疑问题就出现在这几行修改了的语句中。麻烦版主有空再稍微帮我看看那几行语句,如果确实没有问题的话,我再尝试看看是不是其它别的问题。多谢啦
xuzuning 2015-01-23
  • 打赏
  • 举报
回复
发送不了邮件与正则替换并不存在必然关系 对于正则替换,你只要检查一下要替换的字符串是否被正确替换了就可以了
kzdg2006 2015-01-23
  • 打赏
  • 举报
回复
修改了之后还是发送不了邮件,把所有修改的地方贴上来再帮忙看看,多谢了 $body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body); $body = preg_replace("/(^|(\r\n))(\.)/", "\\1.\\3", $body); // 加了定界符,\1.\3修改成了\\1.\\3 $domain = ereg_replace("^.+@([^@]+)$", "\1", $address); $domain = preg_replace("/^.+@([^@]+)$/", "\\1", $address); // 加了定界符,\1修改成了\\1 $response = str_replace("\r\n", "", fgets($this->sock, 512)); $this->smtp_debug($response."\n"); if (!ereg("^[23]", $response)) //修改为 if (!preg_match("/^[23]/", $response)) ,加了定界符 { fputs($this->sock, "QUIT\r\n"); fgets($this->sock, 512); $this->log_write("Error: Remote host returned \"".$response."\"\n"); return FALSE; } $comment = "\([^()]*\)"; //修改为$comment = "/ \([^()]*\) /"; 加了定界符 while (preg_match($comment, $address)) { $address = ereg_replace($comment, "", $address); 修改为:$address = preg_replace($comment, "", $address); } $address = ereg_replace("([ \t\r\n])+", "", $address); $address = preg_replace("/([ \t\r\n])+/", "", $address); // 加了定界符 $address = ereg_replace("^.*<(.+)>.*$", "\1", $address); $address = preg_replace("/^.*<(.+)>.*$/", "\\1", $address); // 加了定界符且\1修改成了\\1
xuzuning 2015-01-23
  • 打赏
  • 举报
回复
形如 "\1.\3" 的要写作形如 "\\1.\\3" 或 "$1.$3" 或 '\1.\3'

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧