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

WebByte

Проходящий мимо
Регулярные выражовывания

Есть строка вида _1_23_7_444 .. _nn
То есть некоторые числа, разделенные подчерками.
Длина строки неизвестна.
Надо заменить число на N-ой позиции на другое число.
С помощью регулярного выражения.
 

lucas

Guest
Здесь не нужны регулярные выражения.

[m]strpos[/m], [m]substr[/m], [m]str_replace[/m]
[m]explode[/m]
 

WebByte

Проходящий мимо
2 neko
Какой шаблон и какая функци предполагается в preg_replace_callback?

2 lucas
решение задачи нужно именно с использованием регулярного выражения.
 

lucas

Guest
решение задачи нужно именно с использованием регулярного выражения
Вырезаем гланды через задний проход?

Хорошо. В callback'е считаешь количество чисел, запоминаешь в статической переменной, когда нужно -- делаешь замену.
 

Demiurg

Guest
>решение задачи нужно именно с использованием регулярного выражения.
откуда такие ограничения ?
 

SiMM

Новичок
lucas, ещё один похоже экзамен на профпригодность сдаёт. Вот и думай теперь - то ли показывать решение без callback'а (вроде получилось), то ли недопускать того, чтобы такой человек работал, по крайней мере пока, не на своём месте.
 

neko

tеam neko
без callback, но с регами?
покажи :)

а за место неволнуйся, у нас везде такие работают
 

WebByte

Проходящий мимо
Demiurg, задачи ставит голова :) Решение с explode() тривиально, хочется решить preg_replace()

SiMM, сдаю самому себе.
Пока получилось заменить число на N-й позиции, если на 1..N-1 местах стоят цифры, а не числа...
Шаблон "/(?<=(_\d){N-1}_)\d+/"
 

Demiurg

Guest
neko
а как можно сделать с помощью preg_replace_callback, но без РВ ?

-~{}~ 02.06.04 11:55:

>задачи ставит голова
так вот пусть она и решает
 

WebByte

Проходящий мимо
Всем спасибо. Решение найдено.
$str - искомая строка
$n - номер числа, которое надо заменить
$num - чем заменить
PHP:
$str = preg_replace("!^((_\d+){".($n-1)."})_(\d+)(.*)!", "$1_".$num."$4",$str);
 

Demiurg

Guest
>никак, а я где-то писал что можно?
сорри, я немного не так прочитал вопрос, но без колбека тоже можно
 

SiMM

Новичок
WebByte, почти как у меня :) Только до кучи - последняя скобка (.*) в строке поиска и $4 в строке замены вовсе необязательны.
 
Сверху