Регулярное выражение PHP Разделенное число и строка


Я хотел бы разделить строку, содержащую несколько цифр и букв. Вот так:

ABCd Abhe123
123ABCd Abhe
ABCd Abhe 123
123 ABCd Abhe

Я попробовал это:

<?php preg_split('#(?<=\d)(?=[a-z])#i', "ABCd Abhe 123"); ?>

Но это не работает. Только одна ячейка в массиве с "ABCD Abhe 123"
Я хотел бы, например, в ячейке 0: числа и в ячейке 1: строка:

[0] => "123",
[1] => "ABCd Abhe"

Спасибо вам за вашу помощь!;)

Author: Passerby, 2013-10-22

2 answers

Используйте preg_match_all вместо

preg_match_all("/(\d+)*\s?([A-Za-z]+)*/", "ABCd Abhe 123" $match);

Для каждого матча:

  • $match[i][0] содержит соответствующий сегмент
  • $match[i][1] содержит числа
  • $match[i][2] содержит буквы

(См. здесь для проверки регулярного выражения)

Затем поместите их в массив

for($i = 0; $i < count($match); $i++)
{
    if($match[i][1] != "")
        $numbers[] = $match[1];

    if($match[i][2] != "")
        $letters[] = $match[2];
}

ПРАВКА1

Я обновил регулярное выражение . Теперь он ищет либо цифры, либо буквы, с пробелами или без них.


ПРАВКА2

Регулярное выражение правильно, но обработка массива не была. Используйте preg_match_all, тогда $match - это массив, содержащий массивы, например:

Array
(
    [0] => Array
        (
            [0] => Abc
            [1] =>  aaa
            [2] => 25
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 25
        )

    [2] => Array
        (
            [0] => Abc
            [1] => aaa
            [2] => 
        )

)
 2
Author: Richard de Wit, 2013-10-22 12:00:21

Может быть, что-то вроде этого?

$numbers = preg_replace('/[^\d]/', '', $input);
$letters = preg_replace('/\d/', '', $input);
 0
Author: Lajos Veres, 2013-10-22 10:35:16