Регулярные выражения продолжение

Pegiy

Guest
Регулярные выражения продолжение

Видимо элементарная задача, но никак не справлюсь.
Есть
$str = 'iPod 64 mb';
или
$str = 'iPod 32 m';
или
$str = 'apple iPod 128';
Нужно все варианты привести к виду
iPod 64mb, iPod 32mb, apple iPod 128mb соответственно.
Но только, если это 32, 64, 128.
Например, $str = 'iPod 35 m' оставить как есть.
Дальше такого неработающего варианта я не ушел:
$str = preg_replace("/(32)|(64)|(128)\s*m?$/", "\\1mb", $str);
 

tiv

Guest
$str = preg_replace("/(32|64|128)\s*?m(.)*?$/sim", "\\1mb", $str); // не проверял
 

Tenz

Guest
насколько я понимаю по \\1 ты обращаешься к тому что в первых скобках, т.е. (32|64|128)
так что, то что ты написал это не должно работать
 

Tenz

Guest
Я бы предложил такой вариант

$str=preg_replace ("/(.*)(iPod)\s(32|64|128)(\s*)(m*)(b*)/i", "\\1 \\2 \\3mb", $str);

Правда я его тестировал только на приведённом тобой примере
 

Tenz

Guest
да, и наверное для 3-х последних скобочек, лучше заменить "*" на "?"
и кроме того, сделать поиск нежадным, если строки будут отличаться от тех, которые ты привёл
 
Сверху