Разделить строку на текст и число


У меня есть несколько строк, которые могут быть в следующем формате

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

Я хочу разделить эти строки на следующие: текст перед числом и число

Например: текст текст 1 (некоторый текст)
При разделении будет выведено:
текст = текстовый текст
число = 1

Все, что после числа, может быть отброшено

Прочитал об использовании регулярных выражений и, возможно, использовании preg_match или preg_split, но я теряюсь, когда дело доходит до регулярного выражения часть

Author: user1981823, 2013-01-16

2 answers

preg_match('/[^\d]+/', $string, $textMatch);
preg_match('/\d+/', $string, $numMatch);

$text = $textMatch[0];
$num = $numMatch[0];

В качестве альтернативы вы можете использовать preg_match_all с группами захвата, чтобы сделать все это одним выстрелом:

preg_match_all('/^([^\d]+)(\d+)/', $string, $match);

$text = $match[1][0];
$num = $match[2][0];
 14
Author: Joseph Silber, 2016-06-17 19:02:59

Используйте preg_match_all()+ если вы хотите сопоставить каждую строку, используйте модификатор m:

$string = 'sometext moretext 01 text
text sometext moretext 002
text text 1 (somemoretext)
etc';
preg_match_all('~^(.*?)(\d+)~m', $string, $matches);

Все ваши результаты находятся в массиве $matches, который выглядит следующим образом:

Array
(
    [0] => Array
        (
            [0] => sometext moretext 01
            [1] => text sometext moretext 002
            [2] => text text 1
        )
    [1] => Array
        (
            [0] => sometext moretext 
            [1] => text sometext moretext 
            [2] => text text 
        )
    [2] => Array
        (
            [0] => 01
            [1] => 002
            [2] => 1
        )
)

Пример вывода:

foreach ($matches[1] as $k => $text) {
    $int = $matches[2][$k];
    echo "$text => $int\n";
}
 1
Author: Glavić, 2013-01-15 22:31:47