在 PHP 5.3 中有一个不错的函数似乎可以满足我的要求:
strstr(input,"\n",true)
不幸的是,服务器运行 PHP 5.2.17 并且可选的第三个参数 ofstrstr
不可用。有没有办法在以前的版本中在一行中实现这一点?
鉴于一行可以由一个 ("\n") 或两个 ("\r\n") 字符分隔,最防弹的方法是
$line = preg_split('#\r?\n#', $input, 0)[0];
对于第一个换行符之前的任何序列,即使它是一个空字符串,并且
$line = preg_split('#\r?\n#', ltrim($input), 0)[0];
对于第一个非空字符串。
大约十年前首次编写此答案时,它具有一些细微的差别
PHP_EOL
不是解决方案,因为我们可以处理外部数据,不受本地系统设置的影响explode()
或preg_split()
一行,因此strtok()
提出了一个技巧 with 。然而,不久之后,由于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);
试试这个:
substr($text, 0, strpos($text, chr(10))
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 现在包含文本或空字符串的第一行,如果没有找到中断符号(或中断符号是文本中的第一个符号)。
您可以strpos
与 结合使用substr
。首先,您找到字符所在的位置,然后返回字符串的该部分。
$pos = strpos(input, "\n");
if ($pos !== false) {
echo substr($input, 0, $pos);
} else {
echo 'String not found';
}
这是你想要的吗 ?
le 没有注意到单行限制,所以这并不适用。您可以按照其他人的建议将这两个函数组合在一行中,或者您可以根据需要创建一个将在一行代码中调用的自定义函数。你的选择。
很多时候字符串操作将面临以空行开头的变量,所以不要忘记评估你是否真的想在字符串的开头和结尾考虑白线,或者修剪它。此外,为避免操作系统错误,请使用 PHP_EOL 以跨平台兼容的方式查找换行符(何时使用 PHP 常量“PHP_EOL”?)。
$lines = explode(PHP_EOL, trim($string));
echo $lines[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));