У меня есть строки, которые могут быть в следующем формате
текст 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"; }