【问题标题】:Regex replace in case beetwen determinated chars (PHP)正则表达式替换确定字符之间的情况(PHP)
【发布时间】:2021-09-23 01:26:09
【问题描述】:

我有一个存储 100 万条广告的 mysql 数据库。此广告具有“Ad_Content”字段并包含随机示例 (Ad_Content):

1 CASE: \r\n{text...text...text...}\r\n\r\n\r\n

2 CASE: {text...text...}\r\n \r\n\r\n

3 CASE: \r\n \r\n{text...}\r\n\r\n\r\n \r\n

4 案例:\r\n \r\n\r\n\r\n{文本...文本...}\r\n \r\n\r\n \r\n

我尝试使用 REGEX 删除字符串“\r\n group”中的所有空格,但我无法得到它。

预期示例:

1 CASE: \r\n{text...text...}\r\n\r\n

2 案例:{text...text...}\r\n\r\n\r\n(好)

3 案例:\r\n\r\n{文本...}\r\n\r\n\r\n\r\n(好)

4 案例:\r\n\r\n\r\n\r\n{文本...文本...}\r\n\r\n\r\n\r\n(好)

我的代码是:

$adContent  = $getDataAd->Ad_Content;
// This REGEX its ok, replace all \r\n\r\n\r\n\r\n... for 2 <br> but broken if detect a space :(
$pattern    = "/(?:\r?\n[ ]*)+/"; 
$adContent  = preg_replace($pattern, "<br><br>", $adContent);

谢谢:)

【问题讨论】:

    标签: php regex laravel


    【解决方案1】:

    您可以对以下模式进行正则表达式替换:

    \r\n\s+(?=\r\n)
    

    示例脚本,使用您的第三个示例作为输入:

    $input = "\r\n \r\n\r\n\r\n{text...text...}\r\n \r\n\r\n \r\n";
    $output = preg_replace("/\r\n\s+(?=\r\n)/", "\r\n", $input);
    

    这里的技巧是使用前瞻(?=\r\n)断言,而不是消耗一个必需的后续 CRLF。这样一来,我们就允许后面的 CRLF 前面也有不需要的空格。

    【讨论】:

    • 谢谢蒂姆!如果执行此脚本运行良好,但如果从数据库中获取字符串不起作用,则不检测空格。
    • 这听起来像是依赖数据的事情,而不是我的回答的主要问题。如果你能提供我的答案失败的数据,也许我可以更新。
    • 别担心蒂姆,你认为这是正确的,谢谢。如果将所有 \r 和 \n 更改为“
      ”,如果字符串是“{text...}


      (或更多
      ,如何限制获取 2 个
      >)", "


      (或更多
      ){text...}


      (或更多
      )"获取"

      {文本...}

      "?
    • 用单个 &lt;br&gt; 替换 CRLF,那么这里使用的等效正则表达式模式将是:/&lt;br&gt;\s+(?=&lt;br&gt;)/
    • 感谢蒂姆,但正则表达式 /
      \s+(?=
      )/ 不起作用:paiza.io/projects/sLcZE5fW99p3gfrxaZGDsg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多