Php 使用正则表达式从textarea post结果中删除行
我正在尝试从textarea post结果中删除一行,以“to”开头 我的尝试: 但它没有起作用 我想要这个输出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
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..)
\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);