10

This is my file:

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

I would split it by \n and have returned in one array each row. How can I do the regular expression?

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

After I will extract all the rows, how can I extract each value separated by backspace?

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

Here the text were I am trying to do it http://regexr.com?2v23c .

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
michele
  • 26,348
  • 30
  • 111
  • 168

5 Answers5

44

If you are having issues because you don't know if each newline is just \n or \r\n or \r then none of the above answers work and a regexp works. What I did was

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

Then you can use the accepted answer to split the spaces.

Bryan
  • 3,449
  • 1
  • 19
  • 23
8

There isn't any need for regular expressions:

<?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);
?>

<test></test>
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Tom
  • 1,647
  • 11
  • 24
6
$rowsapart = preg_split("/\n/",$rowstogether);

$colspart = preg_split("/\s/",$colstogether);
Michael Krelin - hacker
  • 138,757
  • 24
  • 193
  • 173
  • I tested. The link doesn't open well for me, but I'd assume it uses different flavor of regex. – Michael Krelin - hacker Oct 28 '11 at 10:52
  • The problem with this code-only answer is that the OP and researchers may not understand how to set up this technique. In other words, they might not know how to declare `$rowstogether` and `$colstogether`. – mickmackusa Jul 25 '21 at 22:56
2

No need for REGEX, use explode() instead:

<?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

Madara's Ghost
  • 172,118
  • 50
  • 264
  • 308
1
preg_split("/\R/", $content); 

It is the most reliable way to split text by new lines if you are sure that incoming content has Unicode format.

/\R/ Matches any Unicode newline sequence that is in the ASCII range. it is equivalent to

/(?>\r\n|\n|\r|\f|\x0b|\x85)/
sprutex
  • 980
  • 12
  • 12