PHP preg_replace替换换行没什么用

时间:2017-04-22 18:58:13

标签: php regex

我有一个Solr查询检索到的文本字段,其中包含电子邮件正文。我试图通过PHP替换带有段落标记的嵌入式换行符,如下所示:

    static int floorLog2(int64_t x)
    { 
      assert(x > 0);
      return 63 - __builtin_clzl(x);
    }

    static int ceilLog2(int64_t x)
    {
      if (x == 1)
        // On my system __builtin_clzl(0) returns 63.  64 would make more sense   
        // and would be more consistent.  According to stackoverflow this result  
        // can get even stranger and you should just avoid __builtin_clzl(0).     
        return 0;
      else
        return floorLog2(x-1) + 1;
    }

当我在IDE /调试器中显示结果时,换行符不会被替换,并且仍然存在: output example

我一直在浏览这个网站上的线程,尝试不同的人建议的模式,包括" / \ s + /"和PHP_EOL和" /(\ r \ n | \ r | \ n)/"没有任何作用。我做错了什么?

3 个答案:

答案 0 :(得分:4)

type of x用于正则表达式。你想要的是一个简单的字符串替换,所以你应该使用preg_replace

str_replace

答案 1 :(得分:3)

您错过了正则表达式字符串周围的分隔符,并且您没有分配该值 你也可以减少你的正则表达式:

$text = preg_replace("/\r?\n|\r/", '</p><p>', $text);

您可能希望切换到多字节安全版本。他们使用Unicode,你不需要分隔符;)

$text = mb_ereg_replace("\r?\n|\r", '</p><p>', $text);

答案 2 :(得分:0)

等等......愚蠢的问题!应该是

$text = preg_replace($new_line,'</p><p>',$text);

抱歉,我通常使用Perl编写代码并习惯于$ text = ~construction。