在PHP中获取字符串的第一行


Obtain first line of a string in PHP

在PHP 5.3中,有一个很好的函数似乎可以实现我想要的功能:

strstr(input,"'n",true)

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

对于相对较短的文本,行可以由一个("''n&")或两个("''r''n&")字符分隔,一行可以像

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

对于第一行馈送之前的任何序列,即使它是空字符串,

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

用于第一个非空字符串。

然而,对于较大的文本,它可能会导致内存问题,因此在这种情况下,应该首选下面提到的strtok或其他答案中基于substr的解决方案。

大约十年前,当这个答案第一次被写出来时,它有一些细微的差别

  • 它太本地化了,在开场白之后,假设行分隔符总是一个"1";''n〃;性格,但情况并非总是如此。使用PHP_EOL不是解决方案,因为我们可以处理外部数据,而不受本地系统设置的影响
  • 假设我们需要第一个非空字符串
  • 没有办法在一行中使用explode()preg_split(),因此提出了使用strtok()的技巧。然而,不久之后,由于Nikita Popov提出的统一变量语法,可以在简洁的一行中使用其中一个函数

但随着这个问题越来越受欢迎,最好在答案中涵盖所有可能的边缘情况。但由于历史原因,这里有最初的解决方案:

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

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

然而,考虑到行分隔符可能不同,并且strtok()的行为不是那么直,如";字符串开始或结束处的分隔符字符被忽略";,正如它所说的C中原始strtok()函数的手册页,现在我建议谨慎使用这个函数。

虽然很晚了,但您可以使用爆炸。

<?php
$lines=explode("'n", $string);
echo $lines['0'];
?>
$first_line = substr($fulltext, 0, strpos($fulltext, "'n"));

或者附近的什么东西会起作用。丑陋,但可行。

尝试

substr( input, 0, strpos( input, "'n" ) )

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

list($line_1, $remaining) = explode("'n", $input, 2);

如果您想重复操作,可以很容易地获取最上面的行和留下的内容。否则,按照建议使用substr。

不依赖于换行符的类型。

(($pos=strpos($text,"'n"))!==false) || ($pos=strpos($text,"'r"));
$firstline = substr($text,0,(int)$pos);

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

试试这个:

substr($text, 0, strpos($text, chr(10)))

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

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

这是你想要的吗?

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

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

$lines = explode(PHP_EOL, trim($string));
echo $lines[0];

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

示例6$multilinetext的第一行

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

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

echo join("'n",array_splice(explode("'n", $multilinetxt),9,12));