正则表达式在第一次换行时拆分字符串

时间:2011-03-15 14:14:11

标签: php regex

我想在第一个换行符处拆分一个字符串,而不是第一个空白行

'/^(.*?)\r?\n\r?\n(.*)/s'(第一个空行)

例如,如果我有:

  

$ str ='2099测试\ n你确定你   想要继续\ n其他一些字符串   这里...';

match[1] = '2099 test'
match[2] = 'Are you sure you want to continue\n some other string here...'

6 个答案:

答案 0 :(得分:11)

preg_split()有一个限制参数,您可以利用它。你可以简单地做:

$lines = preg_split('/\r\n|\r|\n/', $str, 2);

答案 1 :(得分:6)

<?php
$str = "2099 test\nAre you sure you want to continue\n some other string here...";

$match = explode("\n",$str, 2);
print_r($match);


?>

返回

Array
(
    [0] => 2099 test
    [1] => Are you sure you want to continue
 some other string here...
)

explode的最后一个参数是你想要将字符串拆分成的元素数。

答案 2 :(得分:1)

通常只需删除\r?\n

'/^(.*?)\r?\n(.*)/s'

答案 3 :(得分:1)

您可以将preg_split用作:

$arr = preg_split("/\r?\n/",$str,2);

See it on Ideone

答案 4 :(得分:1)

第一行换行:

$match = preg_split('/\R/', $str, 2);

第一行空白

$match = preg_split('/\R\R/', $str, 2);

处理换行符的所有各种方式。

还有一个关于第二个换行符拆分的问题。这是我的实现方式(可能不是最有效的方法。也请注意,它用PHP_EOL代替了一些换行符)

function split_at_nth_line_break($str, $n = 1) {
    $match = preg_split('/\R/', $str, $n+1);
    if (count($match) === $n+1) {
        $rest = array_pop($match);
    }
    $match = array(implode(PHP_EOL, $match));
    if (isset($rest)) {
        $match[] = $rest;
    }
    return $match;
}

$match = split_at_nth_line_break($str, 2);

答案 5 :(得分:0)

也许你甚至不需要使用正则表达式。要获得分割线,请参阅:

What's the simplest way to return the first line of a multi-line string in Perl?