Регулярка - поиск с заменой

Тема в разделе "Как сделать...", создана пользователем rasandrey, 7 фев 2012.

  1. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Приветствую всех!
    Помогите, плиз, с регуляркой, есть такой кусок текста:

    HTML:
    {prog-vote1} Руководством ОАО «ФСК ЕЭС» было принято решение выступить в качестве Генерального Спонсора Международной выставки по безопасности и охране труда в ТЭК SAPE 2012 и мероприятий в ее рамках.{prog-vote2} 
    Нужно заменить {prog-vote1} на 1 form , а {prog-vote2} на 2 form
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    117
    Симпатии:
    495
    PHP:
    $str '{prog-vote1} Руководством ОАО «ФСК ЕЭС» было принято решение выступить в качестве Генерального Спонсора Международной выставки по безопасности и охране труда в ТЭК SAPE 2012 и мероприятий в ее рамках.{prog-vote2}';
    $str preg_replace ('/\{prog\-vote([0-9]+)\}/''$1 form'$str);
     
    rasandrey нравится это.
  3. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    ептиль, зачем тебе в таком случае регулярки?
    есть же Перейти по ссылке
    PHP:
    $search  = array('{prog-vote1}'' {prog-vote2}');
    $replace = array('1 form''2 form');
    $subject '{prog-vote1} Руководством ОАО «ФСК ЕЭС» было принято решение выступить в качестве Генерального Спонсора Международной выставки по безопасности и охране труда в ТЭК SAPE 2012 и мероприятий в ее рамках.{prog-vote2}';

    echo 
    str_replace($search$replace$subject);
     
  4. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    117
    Симпатии:
    495
    А Вы уверенны, что приведенный Вами пример более универсален, чем мой?
     
  5. newbik

    newbik Создатель

    Регистр.:
    22 апр 2008
    Сообщения:
    14
    Симпатии:
    8
    Он не универсален, он работает как требуется, а если не будет "других" замен, то зачем платить больше? следовательно лучше использовать str_replace, чем регулярки.
     
    unsiker нравится это.
  6. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    117
    Симпатии:
    495
    "Лучше" - это понятие довольно относительное. Начну, пожалуй, с того, что str_replace - не работает в параллельном режиме. Соответственно, при использовании массива замен - эта функция в данном случае будет выполнять два "прохода" по тексту. Если в массиве будет 10 значений, то и цикл замены увеличится до 10 раз. В то время, как preg_replace осуществляет всего один проход(в данном случае), заменяя с первого раза все. Возможно, для данного примера это не особо критично, но тем не менее, элементарная культура и логика в коде должна присутствовать. Большинство "кривых" скриптов появляются именно из-за изначальной постановки вопроса "а, и так сойдет". Потому, прежде чем давать советы, целесообразно по крайней мере выучить матчасть. Более того, я настоятельно рекомендую выучить регу. Ибо в нынешнем программировании регулярки довольно таки востребованы.
     
  7. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Всему свои инструменты, можно и микроскопом гвозди забивать и говорить что я бы настоятельно рекомендовал изучить структуру микроскопа так как он более универсален чем молоток.
    про это я вообще молчу, так как существенной даже для разницы между временем исполнения 0.01 и 0.05 секунд для пользователя нету.
     
  8. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    117
    Симпатии:
    495
    Вы знаете, если бы результат забивания гвоздей микроскопом был лучше, чем молотком(в чем я сомневаюсь), то наверное все бы били гвозди микроскопами. Если Вы считаете, что даже в этом простом примере использование str_replace даст лучший результат, preg_replace, то уделите, пожалуйста, несколько минут и опишите преимущества. Не хочу показаться параноиком, но у меня есть свои мнения относительно кода. Продолжать дальше этот спор не вижу никакого смысла.
     
  9. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    str_replace здесь не катит, т.к. я не знаю сколько и какие будут {prog-voteID}

    Есть еще вопросик, если у меня будет такая строка:
    Код:
    {prog-vote1url='https://www.nulled.cc'} Руководством ОАО «ФСК ЕЭС» было принято решение выступить в качестве Генерального Спонсора Международной выставки по безопасности и охране труда в ТЭК SAPE 2012 и мероприятий в ее рамках.{prog-vote2url='https://www.nulled.cc2'}
    как можно регуляркой заменить:
    {prog-vote1url='Перейти по ссылке[/B]
     
  10. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    117
    Симпатии:
    495
    Если я правильно понял задачу, то так:
    PHP:
    $str preg_replace ('/\{prog\-vote([0-9]+)url\=\'(http\:\/\/[^\']+)\'\}/''$1 form $2'$str);
    В данном случае, URL не проверяется на принадлежность к определенному домену, но все-же, эта регулярка требует, чтобы он начинался именно из "http://".
     
    rasandrey нравится это.