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'
)
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'
)
只需将 $limit 设置2
为数组的 2 个部分。感谢@BenJames 提到:
preg_split("~\n~", $string, 2);
我测试过,它工作正常。
极限参数:
如果指定,则只返回不超过 limit 的子字符串,其余的字符串放在最后一个子字符串中。-1、0 或 null 的限制表示“无限制”,并且按照 PHP 的标准,您可以使用 null 跳到 flags 参数。
这样一个看似简单的任务有相当多的细微差别。在边缘场景中,不同的技术可能会失败或提供偏差的结果。在决定一种技术时,了解输入字符串的质量以及边缘情况下所需的输出非常重要。
长话短说,我可能会用它trim()
来清理任何前导或尾随空白字符。我会在模式中使用preg_split()
with\R
来一致地匹配不同环境中的不同换行符序列。+
如果有连续的换行符,(一个或多个)的量词将提供额外的稳定性。
var_export(
preg_split('~\R+~', trim($string), 2)
);
以上将在至少出现一个换行序列时生成一个二元素数组(两者都不会为空),当没有换行序列发生时生成一个一元素数组。
能explode("\n", $string, 2)
满足吗?是的,当然,但这又归结为输入的质量和所需的输出。
这里有一组测试用例和一些不同的技术来比较好、坏和丑:Demo。
我没有服务器来测试这个。尝试:
preg_split("~\n~",$string,1);
1 代表极限:
限制:如果指定,则仅返回最大限制的子字符串,其余字符串放置在最后一个子字符串中。-1、0 或 null 的限制表示“无限制”,并且按照 PHP 的标准,您可以使用 null 跳到 flags 参数。