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

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

 текст sometext moretext 01
 текст sometext moretext 002
 текстовый текст 1 (somemoretext)
 и т.д 

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

Например: текстовый текст 1 (somemoretext)
Когда split будет выводиться:
text = текстовый текст
число = 1

Что-то после номера можно отбросить

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

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]; 

Используйте 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 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"; }