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

时间:2015-08-20 13:25:21

标签: php regex post textarea newline

我需要拆分包含一些规则的电子邮件,如下所述: PHP split email with rules

所以,我在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并且它有效。 然而,当我通过邮寄在textarea中发送文本时,这似乎是一个问题,因为如果我使用一个字符串就可以了。这是回声的印刷品:

打印出来:

> 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

删除换行符甚至更糟>&gt;&gt; CUT HERE&gt;&gt;没有出现在它的位置......

使用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

任何人都可以帮助我吗?非常感谢你提前!

1 个答案:

答案 0 :(得分:2)

你的回声问题可能只是一个简单的错误就是在webbrowser上显示结果。将最后一行从echo $result;更改为echo nl2br($result);

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

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

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

3v4l