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

rasandrey

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

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

Нужно заменить {prog-vote1} на 1 form , а {prog-vote2} на 2 form
 
PHP:
$str = '{prog-vote1} Руководством ОАО «ФСК ЕЭС» было принято решение выступить в качестве Генерального Спонсора Международной выставки по безопасности и охране труда в ТЭК SAPE 2012 и мероприятий в ее рамках.{prog-vote2}';
$str = preg_replace ('/\{prog\-vote([0-9]+)\}/', '$1 form', $str);
 
ептиль, зачем тебе в таком случае регулярки?
есть же Для просмотра ссылки Войди или Зарегистрируйся
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);
 
А Вы уверенны, что приведенный Вами пример более универсален, чем мой?
Он не универсален, он работает как требуется, а если не будет "других" замен, то зачем платить больше? следовательно лучше использовать str_replace, чем регулярки.
 
следовательно лучше использовать str_replace, чем регулярки.
"Лучше" - это понятие довольно относительное. Начну, пожалуй, с того, что str_replace - не работает в параллельном режиме. Соответственно, при использовании массива замен - эта функция в данном случае будет выполнять два "прохода" по тексту. Если в массиве будет 10 значений, то и цикл замены увеличится до 10 раз. В то время, как preg_replace осуществляет всего один проход(в данном случае), заменяя с первого раза все. Возможно, для данного примера это не особо критично, но тем не менее, элементарная культура и логика в коде должна присутствовать. Большинство "кривых" скриптов появляются именно из-за изначальной постановки вопроса "а, и так сойдет". Потому, прежде чем давать советы, целесообразно по крайней мере выучить матчасть. Более того, я настоятельно рекомендую выучить регу. Ибо в нынешнем программировании регулярки довольно таки востребованы.
 
. Потому, прежде чем давать советы, целесообразно по крайней мере выучить матчасть. Более того, я настоятельно рекомендую выучить регу. Ибо в нынешнем программировании регулярки довольно таки востребованы.
Всему свои инструменты, можно и микроскопом гвозди забивать и говорить что я бы настоятельно рекомендовал изучить структуру микроскопа так как он более универсален чем молоток.
при использовании массива замен - эта функция в данном случае будет выполнять два "прохода" по тексту. Если в массиве будет 10 значений, то и цикл замены увеличится до 10 раз. В то время, как preg_replace осуществляет всего один проход(в данном случае), заменяя с первого раза все. Возможно, для данного примера
про это я вообще молчу, так как существенной даже для разницы между временем исполнения 0.01 и 0.05 секунд для пользователя нету.
 
Всему свои инструменты, можно и микроскопом гвозди забивать и говорить что я бы настоятельно рекомендовал изучить структуру микроскопа так как он более универсален чем молоток.
Вы знаете, если бы результат забивания гвоздей микроскопом был лучше, чем молотком(в чем я сомневаюсь), то наверное все бы били гвозди микроскопами. Если Вы считаете, что даже в этом простом примере использование str_replace даст лучший результат, preg_replace, то уделите, пожалуйста, несколько минут и опишите преимущества. Не хочу показаться параноиком, но у меня есть свои мнения относительно кода. Продолжать дальше этот спор не вижу никакого смысла.
 
str_replace здесь не катит, т.к. я не знаю сколько и какие будут {prog-voteID}

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

как можно регуляркой заменить:
{prog-vote1url='Для просмотра ссылки Войди или Зарегистрируйся на 1 form Для просмотра ссылки Войди или Зарегистрируйся, а {prog-vote2url='Для просмотра ссылки Войди или Зарегистрируйся на 2 form Для просмотра ссылки Войди или Зарегистрируйся
 
как можно регуляркой заменить:
{prog-vote1url='Для просмотра ссылки Войди или Зарегистрируйся на 1 form Для просмотра ссылки Войди или Зарегистрируйся, а {prog-vote2url='Для просмотра ссылки Войди или Зарегистрируйся на 2 form Для просмотра ссылки Войди или Зарегистрируйся

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