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

Posted

技术标签:

【中文标题】使用帖子传递字符串时,正则表达式不起作用【英文标题】:Regex not working when passing string with post 【发布时间】:2015-11-14 04:06:36 【问题描述】:

我需要使用一些规则拆分电子邮件,如下所述: php split email with rules

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

这是我的代码:

文件 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

它会删除换行符,更糟糕的是 >>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

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

【问题讨论】:

【参考方案1】:

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

nl2br() 是 php 中的一个函数,可以将换行符转换为&lt;br/&gt;,这将在网络浏览器中正确显示

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

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

3v4l

【讨论】:

正确,但是正则表达式不起作用,因为 >>CUT HERE>> 没有出现在它应该出现的位置。工作于:3v4l.org/mqrJc @MiguelSousa 你能在使用 nl2br 后显示新的输出吗?它会有所帮助。相信我。 用输出编辑了问题。可以直接在这里测试:louros.webmadeira.net/teste/teste.php @MiguelSousa 啊哈!我认为这是错误 :) 你在那个字符串中没有单个 \n,你有 \r\n 啊!非常感谢!我将正则表达式更改为: "/(?:\sF\d+.*?\r\n\r\n)(\r\n)/" 并且工作了!

以上是关于使用帖子传递字符串时,正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的replace不起作用?

Javascript 正则表达式逗号检测不起作用

linux g++正则表达式不起作用

我正在尝试使用正则表达式来指定字符数量。大括号不起作用[重复]

使用 pyinputplus 时,正则表达式似乎在 allowRegexes 参数中不起作用

为啥我的产品代码的正则表达式不起作用? [关闭]