如何使用 PHP 从文本区域解析文本中的 \n 符号

Posted

技术标签:

【中文标题】如何使用 PHP 从文本区域解析文本中的 \\n 符号【英文标题】:How to parse \n symbols in text from text area with PHP如何使用 PHP 从文本区域解析文本中的 \n 符号 【发布时间】:2014-08-14 22:32:40 【问题描述】:

我有一个文本区域,我需要在提交表单时解析文本。

例如,我需要从该文本区域获取第一个字符串,获取它并保留整个文本。我不想使用nl2br 函数,然后将模式与<br /> 一起使用。我可以只解析\n 字符吗?如果可以的话怎么办?我无法在我的 php 代码中执行此操作,但我可以在正则表达式测试器中执行示例链接如下。

http://regex101.com/r/mK7hF2

这是我的代码不起作用:

preg_match('/(.+)\n\n/', $_POST['text'],$title);

$title = $title[0];

echo $title;

它什么也不返回。帮我改一下,谢谢。

编辑

【问题讨论】:

使用双引号。 RTFM 【参考方案1】:

你不需要正则表达式,使用strtok:

$title = strtok( $_POST['text'], "\n" );

编辑

好的,然后尝试使用\R 匹配任何类型的行尾'/(.+)\R/'

【讨论】:

至少它可以工作 =),但我正在寻找正则表达式解决方案。如果我没有为我的问题找到另一个解决方案,我会将其标记为正确答案。 成功了!正如@hwnd 所说this matches Unicode newlines sequences 一定是这样。【参考方案2】:

这应该在php 中工作:

$re = '/(.+)\n\n/'; 
$str = "first string\n\nsecond string\n\nother strings bla bla bla"; 
if (preg_match($re, $str, $matches))
   echo $matches[1];
else
   echo "nope";

输出:

first string

在输入 $str 中使用双引号很重要,以便 \n 被解释为换行符。

Working Demo

【讨论】:

这绝对适用于这个例子,但不适用于$_POST['text'](这是文本区域)。为什么? 你能显示var_dump($_POST['text']);的输出吗? string(46) "第一个字符串第二个字符串其他字符串" 这意味着你的输入字符串中没有\n。试试这个正则表达式:$re = '/(\S+)/'; 这种模式很有效。但是我不明白为什么没有\n?我将文本区域屏幕截图添加到我的问题中,以便您查看必须有\n。顺便说一句,如果我使用nl2br 文本格式看起来像在文本区域中,那么必须有\n 以将其替换为<br />【参考方案3】:

在这种情况下请改用\R。默认情况下,这匹配 Unicode 换行符序列。

preg_match('/(.+)\R+/', $_POST['text'], $title);
echo $title[1];

参考

PHP Regex: How to match \r and \n?

【讨论】:

感谢您的回复,Danijel 是第一个提供此功能的人,这对我有用,谢谢您的帮助。 @flinth 不用担心,如果您再次遇到此问题,我会查看参考答案,它解释了\R

以上是关于如何使用 PHP 从文本区域解析文本中的 \n 符号的主要内容,如果未能解决你的问题,请参考以下文章

HTML5如何从文本区域中获取选定的文本

在将数据输出回文本区域时,如何正确清理从文本区域接收的数据?

jQuery - 从文本区域中删除用户输入文本

ko.JS 数据绑定从文本区域获取输入 - 不捕获 /n

文本区域表单中的 Html 占位符文本

如何从 jquery 的文本区域中获取选定的文本? [复制]