Php 使用正则表达式从textarea post结果中删除行

Php 使用正则表达式从textarea post结果中删除行,php,html,regex,Php,Html,Regex,我正在尝试从textarea post结果中删除一行,以“to”开头 我的尝试: 但它没有起作用 我想要这个输出 Date: __date\n"."Mime-Version: 1.0\nFrom: __From \nSubject: __Subject \nReply-To: __Reply-To\nX-Job: __X-Job' 编辑: 我使用的最后一个解决方案考虑到输入来自textarea $text = preg_replace("/To.*?Subjec

我正在尝试从textarea post结果中删除一行,以“to”开头 我的尝试:

但它没有起作用

我想要这个输出

Date: __date\n"."Mime-Version: 1.0\nFrom: __From \nSubject: __Subject         \nReply-To: __Reply-To\nX-Job: __X-Job'
编辑: 我使用的最后一个解决方案考虑到输入来自textarea

        $text = preg_replace("/To.*?Subject:/s","Subject:",$var);

第一个解决方案,不使用
\n
和任何修改器,首先是问题描述:

$text = preg_replace("/To.*?Subject:/","Subject:",$var);
这是一个更通用的版本,使用结尾
\n
作为分隔符。

$text = preg_replace("/\bTo:.*?\n/", "", $var, 1);
  • \b
    标记单词的开头
  • *?
    具有
    表示不贪婪,这意味着当满足
    \n
    时匹配停止
  • 最后一个
    1
    告诉
    preg\u replace
    只替换一个(第一个)出现的
    (一开始我忘了,默认值是all-PHP不是Perl..)
注意:在php中,$var='x\n y\n'不会将
\n
扩展为CR,因为使用了单引号
'
。必须使用双引号:
$var=“x\n y\n”
在单独的行中获取
x
y

--

(实际上,更准确地说,
/\bTo:.*\n/
也可以,因为没有使用
s
修饰符,
*
\n
不匹配。使用
s
修饰符
\n
匹配,并且
是必要的:
/\bTo:.\n
,但是使用它更为清晰。)使用
无论如何,最好不要忘记这个有用的选项!)

尝试使用:


现在取消设置所需的键您需要
/m
修改器,以便
^
匹配每行的开头,然后使用以下表达式:

$text = preg_replace("/^To:.*/m", "", $var);
我没有使用
/s
修饰符,因为这会导致
也匹配换行符,而这不是您想要的


顺便说一句,根据规范,MIME头可能跨越多行;我忽略了这个答案:)

就像这样,它删除了to之后的所有单词,我想要这个输出日期:。“MIME版本:1.0\nFrom:\nObject:\nSubject\nReply to:\nX-Job:\uU X-Job”它只适用于这种单独的情况,如果受试者不遵守,它将无法按预期工作。是的,这不是一个完美的解决方案,但它可以工作:)更新答案以获得更通用的解决方案。@Jack我已经查看了你的答案,但它不起作用,您可以尝试@ring0。第二种解决方案不起作用。我们可以假设您使用双引号来括起字符串吗?单引号的工作方式不同。
$var = 'Date: __date\n"."Mime-Version: 1.0\nFrom: __From \nTo: __To\nSubject: __Subject         \nReply-To: __Reply-To\nX-Job: __X-Job';
$arr = explode('\n', $var);
$text = preg_replace("/^To:.*/m", "", $var);