6

preg_match()给出一场比赛。
preg_match_all()返回所有匹配项。
preg_split()返回所有拆分。

我怎样才能只在第一场比赛中分裂?

例子:

preg_split("~\n~", $string);

这就是我要的:

array(
  0 => 'first piece',
  1 => 'the rest of the string
        without any further splits'
)
4

4 回答 4

15

只需将 $limit 设置2为数组的 2 个部分。感谢@BenJames 提到:

preg_split("~\n~", $string, 2);

我测试过,它工作正常。

极限参数:

如果指定,则只返回不超过 limit 的子字符串,其余的字符串放在最后一个子字符串中。-1、0 或 null 的限制表示“无限制”,并且按照 PHP 的标准,您可以使用 null 跳到 flags 参数。

于 2009-11-03T16:03:27.007 回答
6

只需添加限制标志

preg_split("~\n~", $string, 2);

手册

如果指定,则只返回不超过 limit 的子字符串,字符串的其余部分放在最后一个子字符串中。

于 2009-11-03T16:05:23.360 回答
0

这样一个看似简单的任务有相当多的细微差别。在边缘场景中,不同的技术可能会失败或提供偏差的结果。在决定一种技术时,了解输入字符串的质量以及边缘情况下所需的输出非常重要。

长话短说,我可能会用它trim()来清理任何前导或尾随空白字符。我会在模式中使用preg_split()with\R来一致地匹配不同环境中的不同换行符序列。+如果有连续的换行符,(一个或多个)的量词将提供额外的稳定性。

var_export(
    preg_split('~\R+~', trim($string), 2)
);

以上将在至少出现一个换行序列时生成一个二元素数组(两者都不会为空),当没有换行序列发生时生成一个一元素数组。

explode("\n", $string, 2)满足吗?是的,当然,但这又归结为输入的质量和所需的输出。

这里有一组测试用例和一些不同的技术来比较好、坏和丑:Demo

于 2021-03-18T12:57:11.137 回答
-1

我没有服务器来测试这个。尝试:

preg_split("~\n~",$string,1);

1 代表极限:

限制:如果指定,则仅返回最大限制的子字符串,其余字符串放置在最后一个子字符串中。-1、0 或 null 的限制表示“无限制”,并且按照 PHP 的标准,您可以使用 null 跳到 flags 参数。

于 2009-11-03T16:09:29.420 回答