За последние 24 часа нас посетили 17733 программиста и 1655 роботов. Сейчас ищут 889 программистов ...

Найти 3-е вхождение символа в строке и заменить

Тема в разделе "Сделайте за меня", создана пользователем romagromov, 17 дек 2015.

  1. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ещё осталось сравнить скорость двух алгоритмов
     
  2. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    denis01,
    Лень писать ;)
    Если хочешь запили скриптик, тестанем;))
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    твое решение лишь инверсия нашего алгоритма. мы проверяем на совпадение и возвращаем замену иначе оригинал, а ты проверяешь на НЕ совпадение и возвращаешь оригинал иначе замену. и ничего естественного в этом я не вижу. если есть задача "заменить на таком-то вхождении" то фрагмент алгоритма её решения естественнее формулировать "мы достигли такого-то вхождения? да - заменить. иначе - вернуть оригинал" нежели "мы не достигли такого-то вхождения? да - оригинал. иначе - заменить". хотя для кого-то и секс с резиновой бабой может быть естественным.
     
  4. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Я не отрицаю, что я изменил. Ты доволен?
    Сейчас интересно, чтобы ТС нам показал, что он там решит. :)
    Или ему уже ничего не нужно.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тут ты заявляешь что у нас алгоритмы НЕРАБОЧИЕ. и приводишь алгоритм в котором просто инверсируешь логику сравнения. поскольку ты инверсировал только логику сравнения то и твой алгоритм НЕРАБОЧИЙ по твоим же собственным убеждениям. ты в нем не поменял алгоритма а только взаимно инвертировал один кусок. следовательно раз наш алгоритм с такой логикой нерабочий то и твой алгоритм с таким же куском - нерабочий. я лишь об этом хотел тебе сказать. при чем тут доволен или не доволен я. ты просто сам себе напротиворечил а я просто намекнул тебе что ты сам себе напротиворечил. не знаю как можно померить уровень довольства от того что кому-то намекаешь на то что он себе напротиворечил. ну пусть будет "я доволен". ок?
     
  6. romagromov

    romagromov Активный пользователь

    С нами с:
    17 дек 2015
    Сообщения:
    73
    Симпатии:
    0
    Здравствуйте!

    То есть, если мне надо сделать первую замену на 10-м вхождении, а вторую на 25-м получится так?

    Код (PHP):
    1. $s = 'test test  123 123 123 123 123 123 123 123 123 123 123 123 abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc';
    2. var_dump(preg_replace(['/(.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*)(2)/U', '/(.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*b.*)(b)/U'], ['${1}0', '${1}B'], $s));
    А реально в цифровом значении задавать количество пропускаемых вхождений?

    Например, стоит задача получать предварительно полученные от пользователя.
    После получения этих данных мы имеем:
    Код (PHP):
    1. $firstcount = 3;
    2. $secondcount = 4;
    3. $firstreplace = "replace1";
    4. $secondreplace = "replace2"; 
    То есть получаем текст замены, и количество вхождений для замены.
     
  7. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Чем не устраивает str_repeat()?
    Код (PHP):
    1. $s1 = str_repeat('.*2', 10-1);
    2. $s2 = str_repeat('.*b', 25-1);
    3. preg_replace(["/({$s1}.*)(2)/U", "/({$s2}.*)(b)/U"], ['${1}0', '${1}B'], $s) 
    п.с. работоспособность не проверял