Есть строка: PHP: $str = "123456786768678678"; // Может содержать любую последовательность произвольных цифр Надо её отформатировать в такой формат: X.XXX.XXX.XXX.XXX.XXX.XXX.X и тд. То есть, после 1-ой цифры ставим точку, и далее ставим точку после каждых 3-х цифр. Помогите, что-то совсем не въезжаю как такое сделать.
Спасибо. Действительно можно свою функцию написать и ей парсить строку. Но мне надо именно с использованием регулярных выражений этого добиться. Вроде на Перле такое можно делать. Даже знаю, что надо использовать опережающую проверку. Только вот, не пойму как.
Позитивный lookahead работает только с фиксированным количеством символов, там нельзя делать никаких [0-9]+ Во-вторых, ЛИЧНО Я не вижу никаких рациональных способов реализации подобного регулярными выражениями, хотябы в первую очередь потому, что количество символов в строке варьируется и первый символ акцентируется отдельно.
Mr.M.I.T. A если строка вида ххххх он её разберет как х.ххх.х ? Или строку хх как х.х? Или хххххх как х.ххх.хх ? Разгребет такое? =) Я пока спотыкаюсь о первый символ.
Не важно что там в конце, главное, чтобы первая точка отделила один символ, а дальше по три, если там не будет кратности, по фигу.
PHP: <? $str="1234567890"; $str=preg_replace("#^(\d{1})#","\\1.",$str); $str=preg_replace("#(\d{3})(?!(?:\.|$))#","\\1.",$str); print $str; ?>
а можно и в одну PHP: <? $str="123433454567890"; $str=preg_replace("#( (?(?<=^) ^\d{1} | \d{3} (?! (?:\.|$) ) ) )#x","\\1.",$str); print $str; ?>
Спасибо большое. Только вот здесь не пойму: PHP: <? $str = "12345678934543535454350"; $str = preg_replace("/^(\d{1})/", "\\1.", $str); print $str; ?> ^(\d{1}) - захват первой цифры. \\1 - так мы её вставляем, далее ставим точку. Должно получиться: "1.". Каким образом всё остальное, то, что после единицы, туда попадает? На выходе странным образом для меня получается: "1.2345678934543535454350". Объясните пожалуйста.
Есть вот такой вариант, очень простой: PHP: <? $str = "564567867686786785646467567876786786786997889787897979978976"; $str = preg_replace("/(\d)(\d{2})/", "\\1.\\2", $str); print $str // Выводит: 5.645.678.676.867.867.856.464.675.678.767.867.867.869.978.897.878.979.799.789.76 ?>