помогите с регуляркой

Статус
В этой теме нельзя размещать новые ответы.
Насколько я знаю - в DLE есть Фильтр слов.
Можно, вроде, использовать его для подобной замены.
Если, конечно, Вы у себя парсите свои тексты...
 
  • Автор темы
  • Заблокирован
  • #12
Насколько я знаю - в DLE есть Фильтр слов.
Можно, вроде, использовать его для подобной замены.
Если, конечно, Вы у себя парсите свои тексты...

Да, есть, но когда нужно заменять например фразу да еще и по маске допустим

Добр* * пожалова*

То он совершенно не подходит. А так оформил как модуль и радуюсь, сейчас доведу до ума и положу в разделе дле
 
подскажите плиз с регуляркой

<span class='tip' title="рандомный текст">2010-12-17</span> </p>

сейчас так
preg_match('#tip(.*?)span#', $res, $m);

получается на выходе:
' title="рандомный текст">2010-12-17</

А как сделать, чтобы на выходе только дата осталась? (2010-12-17)
 
Код:
preg_match('#<span.*?>([^<>]*?)</span>#', $res, $m);
 
  • Автор темы
  • Заблокирован
  • #15
Опять проблема становится актуальной.
Есть текст
Код:
<div id="news-id-5" style="display:inline;"><!--TBegin--><a href="http://dle9.ru1/uploads/posts/2010-12/1293002975_avatar.jpg" onclick="return hs.expand(this)" ><img src="/uploads/posts/2010-12/thumbs/1293002975_avatar.jpg" alt='Volkswagen sdfgsdfg' title='Volkswagen sdfgsdfg'  /></a><!--TEnd--><br />В I квартале 2007 года через официальных дилеров Volkswagen реализовал в России 5084 легковых автомобиля. Это на 84% больше показателя 2006 года, когда за аналогичный период было продано 2766 машин. При этом в марте 2007 года был продан 2531 легковой автомобиль, что является абсолютным рекордом продаж для немецкой марки в России за один месяц.<br /><br />В 2007 году лидером по продажам в модельном ряду Volkswagen стал Passat. В период с января по март 2007 года было реализовано 2262 автомобиля этой модели (включая 233 Passat Variant). Для сравнения, за аналогичный период прошлого года было продано 905 автомобилей Passat. Таким образом, рост продаж составил 150%.<br />Volkswagen Touareg по итогам продаж первых трех месяцев 2007 года занимает второе место: за указанный период продано 807 этих внедорожников класса "люкс". Легкое снижение продаж этой модели по сравнению с первым кварталом 2006 г. (938 автомобилей Touareg) объясняется выходом нового поколения Touareg на российский рынок только в феврале. В январе-феврале продавались Touareg первого поколения в количестве лишь 99 и 172 шт. соответственно, в то время как после выхода нового Touareg на рынок в марте продано 536 шт.<br /><div align="center"><!--TBegin--><a href="http://dle9.ru1/uploads/posts/2010-12/1293002975_avatar.jpg" onclick="return hs.expand(this)" ><img src="/uploads/posts/2010-12/thumbs/1293002975_avatar.jpg" alt='Volkswagen sdfgsdfg' title='Volkswagen sdfgsdfg'  /></a><!--TEnd--></div><br /><br />На третьем месте по итогам I квартала 2007 года &ndash; <a href="http://sdfsd.ru/" target="_self" title="Volkswagen Golf">Volkswagen Golf</a>, продажи которого выросли на 37% по сравнению с аналогичным периодом прошлого года (656 и 479 шт. соответственно).<br /><br />Продажи Golf Plus за три месяца 2007 года увеличились на 314%. С января по март текущего года продано 319 автомобилей против 77 автомобилей за аналогичный период 2006 года.<br /><br />Динамичный рост показал также новый Touran: в первом квартале 2007 г. продано 184 шт. против 57 шт. в первом квартале 2006 г. Таким образом, продажи Touran выросли на 223%.</div>
никак не могу осилить регулярку которая поменяет все вхождения слова Volkswagen не испортив уже имеющуюся ссылку и title к картинкам.
пока дошел до этого
PHP:
$patterns='#(.*?)(Volkswagen)#is';
$replacements = '$1<a href="'.$row[url].'" target="'.$row[type].'" title=\"$2\">$2</a>';
$post = preg_replace($patterns,$replacements,$post);
Но такая регулярка портит title и уже имеющиеся ссылки. Помогите пожалуйста.
Заранее спасибо
 
PHP:
$patterns='#(^[^<]*|<[b-z][^>]*>[^<]*)(Volkswagen)(?=\W)#iU';
$replacements = '$1<a href="'.$row['url'].'" target="'.$row['type'].'" title="$2">$2</a>';

т.е. замена везде кроме атрибутов одинарного тега и текста тега 'a'
 
  • Нравится
Реакции: Juri
  • Автор темы
  • Заблокирован
  • #17
PHP:
$patterns='#(^[^<]*|<[b-z][^>]*>[^<]*)(Volkswagen)(?=\W)#iU';
$replacements = '$1<a href="'.$row['url'].'" target="'.$row['type'].'" title="$2">$2</a>';
т.е. замена везде кроме атрибутов одинарного тега и текста тега 'a'

Спасибо огромное, все отлично, но если предложение начинается с слова Volkswagen то замены не происходит, это можно как то поправить?
 
в таком случае, один вариант - обработка html по частям:

PHP:
// $post;
$patterns='#(?<=\W|^)(Volkswagen)(?=\W|$)#i';
$replacements = '<a href="'.$row['url'].'" target="'.$row['type'].'" title="$1">$1</a>';

$parts = preg_split("#(<a\s[^>]+>.+</a>\s?|<[/!?]?[a-z\-\[][^>]*>\s?)#isU",$post,-1,1|2);
foreach ($parts as $part) { if($part[0]=='<') { $post_res.=$part; continue; }
$post_res .= preg_replace($patterns,$replacements,$part); }
// $post_res;
 
  • Нравится
Реакции: Juri
Дабы не плодить темы...
Нужна помощь в составлении регулярки. Задача: есть фразы, нужно изменить все фразы, которые не в H1,H2 и т.д., т.е. нужно составить регулярка которая искала бы все нужные фразы, но которые не заключены в данные теги.
 
циклом с условием пропуска, регулярка для деления html составляется по шаблону из списка тегов
PHP:
// $html
$skip_tags = array('h1','h2','p');
$find_replace = array('f1'=>'r1','f2'=>'r2');
foreach($skip_tags as $v) $pt_arr[] = "<{$v}(?:\s[^>]+)?>.+</{$v}>";
$skip_pt = '#('.join('|',$pt_arr).')#isU';

$parts = preg_split($skip_pt,$html,-1,1|2); $html='';
foreach($parts as $part) {
   if(preg_match($skip_pt,$part)) $html .= $part;
   else $html .= strtr($part,$find_replace); }
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху