使用 post 传递字符串时正则表达式不起作用

Regex not working when passing string with post

我需要按照此处说明的一些规则拆分电子邮件:

所以,我在 regex101 上尝试了解决方案:https://regex101.com/r/rT0yQ1/1 并且它有效,但是当我在我的服务器上使用 php 执行此操作并将电子邮件内容粘贴到文本框然后发送时post 的内容不再有效。

这是我的代码:

文件teste.php:

<form method="post" action="teste2.php" enctype="multipart/form-data">
  <textarea name="email" cols="110" rows="30" id="email"></textarea>
  <br />
  <input type="submit" value="Dividir" />
</form>

文件teste2.php:

<?php
    $str = $_POST['email'];
    $re = "/(?:\sF\d+.*?\n\n)(\n)/"; 
    $subst = ">>CUT HERE>>"; 
    $result = preg_replace($re, $subst, $str);
    echo $result;
?>

我在这里试了一下:https://3v4l.org/mqrJc 很有效。 但是,当我通过 post 在文本区域中发送文本时,这似乎是一个问题,因为如果我使用字符串,它就可以工作。这是回声的打印:

它打印这个:

> A N K U N F T 11.08.15 *** NEUBUCHUNG *** 11.08.15 xxx xxx X3 2830
> 14:25 17:50 18.08.15 xxx xxx X3 2831 18:40 F882129 dsdsaidsaia F882129
> xxxyxyagydaysd A N K U N F T 18.08.15 *** NEUBUCHUNG *** 11.08.15 xxx
> xxx X3 2830 14:25 17:50 18.08.15 xxx xxx X3 2831 18:40 F881554
> ZXCXZCXCXZCCXZ F881554 xcvcxvcxvcvxc F881554 xvcxvcxcvxxvccvxxcv
> 11.08.15 xxx xxx X3 2830 14:25 17:50 18.08.15 xxx xxx X3 2831 18:40 F881605 xczxcdfsfdsdfs F881605 zxccxzxzdffdsfds

它会删除换行符,更糟糕的是 >>CUT HERE>> 不会出现在它应该出现的地方...

使用 nl2br 后输出为:

A N K U N F T 11.08.15
*** NEUBUCHUNG ***
11.08.15 xxx xxx X3 2830 14:25 17:50
18.08.15 xxx xxx X3 2831 18:40
F882129 dsdsaidsaia
F882129 xxxyxyagydaysd


A N K U N F T 18.08.15
*** NEUBUCHUNG ***
11.08.15 xxx xxx X3 2830 14:25 17:50
18.08.15 xxx xxx X3 2831 18:40
F881554 ZXCXZCXCXZCCXZ
F881554 xcvcxvcxvcvxc
F881554 xvcxvcxcvxxvccvxxcv


11.08.15 xxx xxx X3 2830 14:25 17:50
18.08.15 xxx xxx X3 2831 18:40
F881605 xczxcdfsfdsdfs
F881605 zxccxzxzdffdsfds

谁能帮帮我?非常感谢您!

您的回声问题很可能只是一个简单的错误,在网络浏览器上显示结果。将最后一行从 echo $result; 更改为 echo nl2br($result);

nl2br() 是 php 中的一个函数,它将换行符转换为 <br/>,这将在网络浏览器中正确显示

尝试以下更新后的正则表达式。您的换行符不是 \n,而是 \r\n,所以这就是我们要更改的全部内容。

(?:\sF\d+.*?\r\n\r\n)(\r\n)

3v4l