Разделить строку на текст и число
У меня есть несколько строк, которые могут быть в следующем формате
sometext moretext 01 text text sometext moretext 002 text text 1 (somemoretext) etc
Я хочу разделить эти строки на следующие: текст перед числом и число
Например: текст текст 1 (некоторый текст)
При разделении будет выведено:
текст = текстовый текст
число = 1
Все, что после числа, может быть отброшено
Прочитал об использовании регулярных выражений и, возможно, использовании preg_match или preg_split, но я теряюсь, когда дело доходит до регулярного выражения часть
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];
Используйте 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";
}