У меня есть строка
$str = "101WE3P-1An Electrically-Small104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01"
Я хочу разбить эту строку на числа, например: «101WE3P-1An ….» должен быть первым элементом, «104TUA …» должен быть вторым элементом?
Кто-то написал мне следующий код в моем предыдущем вопросе preg_match для соответствия подстроке трех чисел подряд? несколько минут назад:
$result = preg_split('/^\d{3}$/', $page, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
Базовый уровень: я хочу сопоставить трехзначное число, за которым следует любое отсутствие капиталов, за которым следует что-нибудь, включая \ t? Заранее спасибо.
Вы можете сообщить preg_split()
чтобы разбить в любой точке строки, за которой следуют три цифры, используя утверждение lookahead .
$str = "101WE3P-1An Electrically-Small104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01"; $result = preg_split('/(?=\d{3})/', $str, -1, PREG_SPLIT_NO_EMPTY); var_export($result);
Дает следующий массив:
array ( 0 => '101WE3P-1An Electrically-Small', 1 => '104TU5A-3,Signal-Interference Duplexers Gomez-GarciaRobertoTU5A-3-01', )
Флаг PREG_SPLIT_NO_EMPTY
используется, потому что начало строки также является точкой, где есть три цифры, поэтому здесь происходит пустое разделение. Мы могли бы изменить регулярное выражение так, чтобы он не разбивался в самом начале строки, но это сделало бы его немного более трудным для понимания на первый взгляд, тогда как флаг очень ясен.
Я попробовал матч, а не раскол
preg_match_all('/^(\d{3}.*?)*$/', $str, $matches); var_dump($matches);
Кажется, чтобы получить правильный результат для вашей выборки