Search code examples
phpregexpreg-matchnumerictext-parsing

Get non-numeric characters then number on each line of a block of texf


I have some strings which can be in the following format:

sometext moretext 01 text
text sometext moretext 002
text text 1 (somemoretext)
etc

I want to split these strings into following:

  • text before the number and
  • the number

For example:

text text 1 (somemoretext)

When split will output:

text = text text
number = 1

Anything after the number can be discarded.


Solution

  • preg_match('/[^\d]+/', $string, $textMatch);
    preg_match('/\d+/', $string, $numMatch);
    
    $text = $textMatch[0];
    $num = $numMatch[0];
    

    Alternatively, you can use preg_match_all with capture groups to do it all in one shot:

    preg_match_all('/^([^\d]+)(\d+)/', $string, $match);
    
    $text = $match[1][0];
    $num = $match[2][0];