Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разбить строку по цифрам
 
 автор: Qiao   (27.10.2008 в 17:46)   письмо автору
 
 

Есть текстовая переменная типа
$var = "asd2fda1fds3fdd4";
Т.е. буквы - цифра - буквы - цифра и т.д.

Требуется получить массив:
$m[1] = asd2;
$m[2] = fda1;
$m[3] = fds3;
$m[4] = fdd4;
т.е. каждая часть - до цифры включительно


Подскажите, пожалуйста, как это осуществить.

  Ответить  
 
 автор: ddhvvn   (27.10.2008 в 17:54)   письмо автору
 
   для: Qiao   (27.10.2008 в 17:46)
 

Тут, думаю, лучше рег. выражением


<?php
  $text 
'asd2fda1fds3fdd4';
  
preg_match_all("|[a-z]+\d+|i"$text$buf);
  
print_r($buf);
?>


P.S.: а кол-во букв/цифр одинаково всегда?
Если да, тогда можно проще...

<?php
  $text 
'asd2fda1fds3fdd4';
  
print_r(str_split($text4));
?>

  Ответить  
 
 автор: Qiao   (27.10.2008 в 18:03)   письмо автору
 
   для: ddhvvn   (27.10.2008 в 17:54)
 

Ага, спасибо.
Количество наборов разное.

Ещё с регвыр придумал - вставить после каждой цифры пробел preg_replace() и затем explode().

  Ответить  
 
 автор: ddhvvn   (27.10.2008 в 18:20)   письмо автору
 
   для: Qiao   (27.10.2008 в 18:03)
 

Зачем делать 2 операции, если можно обойтись одной? )

  Ответить  
 
 автор: Qiao   (28.10.2008 в 06:47)   письмо автору
 
   для: ddhvvn   (27.10.2008 в 18:20)
 

случайно наткнулся на специализированную для этой операции функцию - preg_split()

  Ответить  
 
 автор: ddhvvn   (28.10.2008 в 10:13)   письмо автору
 
   для: Qiao   (28.10.2008 в 06:47)
 

Если для первого варианта, то да.
Хотя разницы практически тут нет.

  Ответить  
 
 автор: Qiao   (28.10.2008 в 17:32)   письмо автору
 
   для: ddhvvn   (28.10.2008 в 10:13)
 

preg_split() , кстати не очень удобная - ведь удалять никаких разделителей не надо.
Придётся пользоваться
$var = preg_split ("|(?<=\d)|", "$var");
Но тут у массива почему-то образуется пустой элемент на конце.

  Ответить  
 
 автор: Qiao   (28.10.2008 в 17:39)   письмо автору
 
   для: Qiao   (28.10.2008 в 17:32)
 

А, там флаг PREG_SPLIT_NO_EMPTY нужен.

Вобщем preg_match_all лучше всего для данной задачи подходит ) Надо только помнить, что искомый массив храниться в его первом (нулевом) елементе.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования