47

在 PHP 5.3 中有一个不错的函数似乎可以满足我的要求:

strstr(input,"\n",true)

不幸的是,服务器运行 PHP 5.2.17 并且可选的第三个参数 ofstrstr不可用。有没有办法在以前的版本中在一行中实现这一点?

4

11 回答 11

123

鉴于一行可以由一个 ("\n") 或两个 ("\r\n") 字符分隔,最防弹的方法是

$line = preg_split('#\r?\n#', $input, 0)[0];

对于第一个换行符之前的任何序列,即使它是一个空字符串,并且

$line = preg_split('#\r?\n#', ltrim($input), 0)[0];

对于第一个非空字符串。

大约十年前首次编写此答案时,它具有一些细微的差别

  • 它过于本地化,在开头的帖子之后假设行分隔符始终是单个“\ n”字符,但情况并非总是如此。使用PHP_EOL不是解决方案,因为我们可以处理外部数据,不受本地系统设置的影响
  • 假设我们需要第一个非空字符串
  • 没有办法使用其中一个explode()preg_split()一行,因此strtok()提出了一个技巧 with 。然而,不久之后,由于Nikita Popov提出的统一变量语法,可以在简洁的单行中使用这些函数之一

但是随着这个问题越来越受欢迎,有必要在答案中涵盖所有可能的边缘情况。但是由于历史原因,这里是原始答案

$str = strtok($input, "\n");

这将从 unix 格式的文本中返回第一个非空行。

但是,鉴于行分隔符可能不同,并且行为strtok()不是那么直接,因为“忽略字符串开头或结尾的分隔符”,正如C 中原始 strtok() 函数的手册页所说,现在我建议谨慎使用此功能。

于 2012-02-01T14:54:54.240 回答
13

很晚了,但你可以使用爆炸。

<?php
$lines=explode("\n", $string);
echo $lines['0'];
?>
于 2012-11-06T20:09:54.463 回答
6
$first_line = substr($fulltext, 0, strpos($fulltext, "\n"));

或者附近的东西可以解决问题。丑陋,但可行。

于 2012-02-01T14:44:09.133 回答
3

尝试

substr( input, 0, strpos( input, "\n" ) )
于 2012-02-01T14:44:38.447 回答
2

echo str_replace(strstr($input, '\n'),'',$input);

于 2012-02-01T14:49:26.117 回答
1

试试这个:

substr($text, 0, strpos($text, chr(10))
于 2012-02-01T14:44:38.523 回答
1
list($line_1, $remaining) = explode("\n", $input, 2);

如果您想重复操作,可以轻松获取顶行和留下的内容。否则按照建议使用 substr 。

于 2012-02-01T14:50:23.930 回答
1

不依赖于换行符的类型。

(($pos=strpos($text,"\n"))!==false) || ($pos=strpos($text,"\r"));

$firstline = substr($text,0,(int)$pos);

$firstline 现在包含文本或空字符串的第一行,如果没有找到中断符号(或中断符号是文本中的第一个符号)。

于 2015-09-05T16:53:11.410 回答
0

您可以strpos与 结合使用substr。首先,您找到字符所在的位置,然后返回字符串的该部分。

$pos = strpos(input, "\n");

if ($pos !== false) {
echo substr($input, 0, $pos);
} else {
echo 'String not found';
}

这是你想要的吗 ?

le 没有注意到单行限制,所以这并不适用。您可以按照其他人的建议将这两个函数组合在一行中,或者您可以根据需要创建一个将在一行代码中调用的自定义函数。你的选择。

于 2012-02-01T14:44:45.457 回答
0

很多时候字符串操作将面临以空行开头的变量,所以不要忘记评估你是否真的想在字符串的开头和结尾考虑白线,或者修剪它。此外,为避免操作系统错误,请使用 PHP_EOL 以跨平台兼容的方式查找换行符(何时使用 PHP 常量“PHP_EOL”?)。

$lines = explode(PHP_EOL, trim($string));
echo $lines[0];
于 2018-02-07T02:54:58.720 回答
0

一种快速获取字符串的前 n 行作为字符串的方法,同时保留换行符。

示例 6 $multilinetxt的第一行

echo join("\n",array_splice(explode("\n", $multilinetxt),0,6));

可以快速适应捕获特定的文本块,例如第 10 到 13 行:

echo join("\n",array_splice(explode("\n", $multilinetxt),9,12)); 
于 2019-12-01T06:31:44.810 回答