1. Начата процедура восстановления социальных групп. Лидерам старых и новых групп обязательно ознакомиться с регламентом проведения работ.

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

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

  1. Приветствую всех!
    Помогите, плиз, с регуляркой, есть такой кусок текста:

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

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

    Administrator
    А Вы уверенны, что приведенный Вами пример более универсален, чем мой?
  5. Он не универсален, он работает как требуется, а если не будет "других" замен, то зачем платить больше? следовательно лучше использовать str_replace, чем регулярки.
    unsiker нравится это.
  6. Viodele Механик

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

    Administrator
    Вы знаете, если бы результат забивания гвоздей микроскопом был лучше, чем молотком(в чем я сомневаюсь), то наверное все бы били гвозди микроскопами. Если Вы считаете, что даже в этом простом примере использование str_replace даст лучший результат, preg_replace, то уделите, пожалуйста, несколько минут и опишите преимущества. Не хочу показаться параноиком, но у меня есть свои мнения относительно кода. Продолжать дальше этот спор не вижу никакого смысла.
  9. str_replace здесь не катит, т.к. я не знаю сколько и какие будут {prog-voteID}

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

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