如何使用正则表达式匹配两个连续的EOL字符

时间:2015-10-12 09:54:41

标签: php regex

我有一个文本字符串,其中双EOL分隔一组值 e.g:

aaa

bbb

ccc

ddd

我需要将此字符串转换为这些值的数组。 我试过了:

 explode('\n\n', $string),
 explode(PHP_EOL . PHP_EOL, $string),
 preg_split('/\n+', $string) &
 preg_split('/\n\n', $string). 

但它没有用。

请帮助。

3 个答案:

答案 0 :(得分:1)

当你不知道换行序列时,你需要匹配任何换行序列,使用\R简写类与PHP正则表达式匹配任何换行序列是非常方便的。添加限制量词{2}以恰好匹配2个换行序列:

'/\R{2}/'

请参阅IDEONE code sample

$s = "aa\r\n\r\nbb\n\ncc\r\n\ndd";
print_r(preg_split('/\R{2}/', $s));

结果:

Array
(
    [0] => aa
    [1] => bb
    [2] => cc
    [3] => dd
)

如果有超过2个换行序列,而您只想分成2个换行序列,请使用'/(?<!\R)\R{2}(?!\R)/'

答案 1 :(得分:0)

首先,如果你想使用任何php的东西,请使用双引号。 \ n将不会被解析为单引号,因此PHP会将其视为普通字符串而不是要解析的内容。

试试这个:

$some = 'aaa

bbb

ccc

ddd';
$output = explode("\r\n\r\n", $some);
print_r($output);

答案 2 :(得分:0)

我认为你可以像这样使用preg_match_all

preg_match_all ("/\S+/", $yourdata, $output_array);

[Ideone Demo]

请注意,使用此解决方案,您的输入数据可以包含不同数量的新行。