不再正常工作的 Regex

来源:互联网 发布:mac 查找命令路径 编辑:程序博客网 时间:2024/04/20 00:11

 碰上这个问题真的是有些摸不着头脑,找不着北。先描述一下我遇到的问题吧。

 

测试程序是对Regex的一个小检验,非常简单:

...

   string emailTemplateContent = LoadTemplate();

   Regex subjectRegex = new Regex(@"/[subject/]/r/n(.*)/r/n/[//subject/]"
    , RegexOptions.Compiled | RegexOptions.Singleline);
   Regex bodyRegex = new Regex(@"/[body/]/r/n(.*)/r/n/[/body/]"
    , RegexOptions.Compiled | RegexOptions.Singleline);

 

   string subject = subjectRegex.Match(emailTemplateContent).Groups[1].Value;
   string body = bodyRegex.Match(emailTemplateContent).Groups[1].Value;
...

 

这段代码在我开发环境 : windows xp + vs2005

和测试环境 : Linux+apache+mod_mono

上执行的都很好,但是在我的运营环境却无论如何不能得到 subject 和 body, 真是莫名其妙了,所有文件都是相同的源,怎么会执行结果不同呢?

在做了足够的测试跟踪后,最终把目标锁定在了 LoadTemplate() 需要装载的原始文本文件上。这个文件是在 windows xp环境下生成的,难不成是它出现问题?

 

登录到运营环境里,打开这个文本look look.

vi template.html

:%!xxd

咦,原来的 /r/n 怎么被转换成了 /n ? 看来是运营环境中的某个环节上出了问题,不过暂时没时间去纠缠他,修改一下代码吧:

 

  Regex subjectRegex = new Regex(@"/[subject/]/r?/n(.*)/r?/n/[//subject/]"
    , RegexOptions.Compiled | RegexOptions.Singleline);
   Regex bodyRegex = new Regex(@"/[body/]/r?/n(.*)/r?/n/[/body/]"
    , RegexOptions.Compiled | RegexOptions.Singleline);

既然/r不一定存在,那就模糊一下吧。修改完就可以正常了。

 

最有可能的原因,就是 ftp 的服务端配置上的问题了。先记下来。