У меня есть эта строка.
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 или есть ли другой способ сделать это?
Здесь используется регулярное выражение:
\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 цифр).
с 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;