PHP RegEx для следующей строки

0

У меня есть эта строка.

130003 lebtro is cool 609664 trochanter2 460936 bibi95 410635 MrRadical38 206311 Labonte 577767 thebanzaikid 569248 marco 355894 Armored_J 630259 SNEG323 569014 llama 501235 plummer 305212 lonefish 294268 dragonbleed 399281 Stelomat 619909 McPred 22733 Storykeeper 634691 The Max 504980 MrFrench 248285 Darkshadow2013 647361 Cain

И я хочу, чтобы вы могли разобрать так, чтобы числа сопровождались буквами:

130003 lebtro is cool<br>
609664 trochanter2<br>
460936 bibi95<br>
410635 MrRadical38<br>
206311 Labonte<br>
...<br>
...<br>
...<br>
647361 Cain

Должен ли я использовать RegEx в PHP или есть ли другой способ сделать это?

Теги:
string
arrays

2 ответа

1

Здесь используется регулярное выражение:

\b(\d+)\s+(.+?(?=\s+\d|$))

демонстрация

Вы можете использовать это с preg_match_all. Каждое совпадение будет содержать номер в первой группе и значение во второй группе.

Что-то вроде этого должно делать:

preg_match_all('#\b(\d+)\s+(.+?(?=\s+\d|$))#', $input, $matches, PREG_SET_ORDER);

// $matches[0][1] == "130003"
// $matches[0][2] == "lebtro is cool"
// $matches[1][1] == "609664"
// $matches[2][2] == "trochanter2"

С помощью этого решения любое число, разделенное пробелами, рассматривается как начало записи. Если все ваши цифры 6 цифр, замените \d+ на \d{6} (или \d{6,} не менее 6 цифр).

1

с preg_split:

$result = preg_split('~\s*\b(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);

или более водонепроницаемый:

$result = preg_split('~(?:\s|\A)\s*(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);

или почему не шаблон:

$result = preg_split('~(?:\s+|\A\s*)(*SKIP)(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);

Без регулярного выражения:

$elts = explode(' ', $str);

$result = array();
$tmp = '';

foreach ($elts as $elt) {
    if (ctype_digit($elt)) {
        if ($tmp) $result[] = $tmp;
        $tmp = $elt;
    } else
        $tmp .= ' ' . $elt;
}
$result[] = $tmp;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню