正则表达式preg_split由新行

时间:2011-10-28 10:45:27

标签: php regex preg-split

这是我的档案:

0.0 5.0 5.0 6.0 7.0 2.0 5.0 2.0 1.0 5.0 5.0 1.0 2.0 7.1 5.0
5.0 0.0 5.0 5.0 5.0 2.0 5.0 1.0 5.0 6.0 6.0 6.0 6.0 1.0 7.1
5.0 5.0 0.0 6.0 1.0 6.0 5.0 5.0 1.0 6.0 5.0 7.0 1.0 5.0 6.0
6.0 5.0 6.0 0.0 5.0 2.0 1.0 6.0 5.0 6.0 2.0 1.0 2.0 1.0 5.0
7.0 5.0 1.0 5.0 0.0 7.0 1.0 1.0 2.0 1.0 5.0 6.0 2.0 2.0 5.0
2.0 2.0 6.0 2.0 7.0 0.0 5.0 5.0 6.0 5.0 2.0 5.0 1.0 2.0 5.0
5.0 5.0 5.0 1.0 1.0 5.0 0.0 2.0 6.0 1.0 5.0 7.0 5.0 1.0 6.0
7.0 1.0 5.0 1.0 2.0 2.0 1.0 5.0 6.0 5.0 2.0 6.0 7.0 0.0 5.0
5.0 7.0 6.0 5.0 5.0 5.0 6.0 2.0 6.0 2.0 1.0 5.0 6.0 5.0 0.0

我会将它拆分为\ n并且每行返回一个数组。 我该怎么做正则表达式?

$rows = preg_split('$regular_expression', $content);

在我将提取所有行之后,如何提取由退格键分隔的每个值?

$values_in_a_row = preg_split('$regular_expression', $a_row);

这里的文字是我试图做的http://regexr.com?2v23c。 非常感谢。

5 个答案:

答案 0 :(得分:29)

如果您遇到问题,因为您不知道每个换行符是\n还是\r\n还是\r,那么上述答案都不起作用且正则表达式有效。我做的是

$lines = preg_split("/(\r\n|\n|\r)/",$content);

然后您可以使用接受的答案来分割空格。

答案 1 :(得分:6)

不需要正则表达式:

<?php
$data = explode("\n", $data); // preg_split('#\n#', $data); Please don't
foreach($data as &$row) {
    $row = explode(' ', $row); // preg_split('#\s#', $row); Seriously
}
print_r($data);
?>

答案 2 :(得分:4)

$rowsapart = preg_split("/\n/",$rowstogether);

$colspart = preg_split("/\s/",$colstogether);

答案 3 :(得分:2)

不需要REGEX,而是使用explode()

<?php

    $file = <<<EOF
    0.0 5.0 5.0 6.0 7.0 2.0 5.0 2.0 1.0 5.0 5.0 1.0 2.0 7.1 5.0
    5.0 0.0 5.0 5.0 5.0 2.0 5.0 1.0 5.0 6.0 6.0 6.0 6.0 1.0 7.1
    5.0 5.0 0.0 6.0 1.0 6.0 5.0 5.0 1.0 6.0 5.0 7.0 1.0 5.0 6.0
    6.0 5.0 6.0 0.0 5.0 2.0 1.0 6.0 5.0 6.0 2.0 1.0 2.0 1.0 5.0
    7.0 5.0 1.0 5.0 0.0 7.0 1.0 1.0 2.0 1.0 5.0 6.0 2.0 2.0 5.0
    2.0 2.0 6.0 2.0 7.0 0.0 5.0 5.0 6.0 5.0 2.0 5.0 1.0 2.0 5.0
    5.0 5.0 5.0 1.0 1.0 5.0 0.0 2.0 6.0 1.0 5.0 7.0 5.0 1.0 6.0
    7.0 1.0 5.0 1.0 2.0 2.0 1.0 5.0 6.0 5.0 2.0 6.0 7.0 0.0 5.0
    5.0 7.0 6.0 5.0 5.0 5.0 6.0 2.0 6.0 2.0 1.0 5.0 6.0 5.0 0.0
    EOF;

    $rows = explode("\n", $file);
    print_r($rows);
    echo "\n\n"; //Spacing

    $numbers_in_a_row = explode(" ", $rows[0]);
    print_r($numbers_in_a_row);

?>

<强> Live Example

答案 4 :(得分:0)

preg_split("/\R/", $content); 

如果您确定传入的内容具有 Unicode 格式,这是按新行拆分文本的最可靠方法。

/\R/ 匹配 ASCII 范围内的任何 Unicode 换行符序列。相当于

/(?>\r\n|\n|\r|\f|\x0b|\x85)/