【问题标题】: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

标签: php regex parsing textarea newline


【解决方案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];

参考

【讨论】:

  • 感谢您的回复,Danijel 是第一个提供此功能的人,这对我有用,谢谢您的帮助。
  • @flinth 不用担心,如果您再次遇到此问题,我会查看参考答案,它解释了\R
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多