Регулярные выражения

TopReseller

Постоялец
Регистрация
30 Июл 2011
Сообщения
336
Реакции
131
Ребят, нужна помощь.
Нужно заменить весь текст в html на слово ТЕКСТ
оставив все остальные теги и классы и прочие атрибуты
Возможно это сделать регуляркой?
 
А есть какой-то пример html-а, чтоб посмотреть какие там вообще теги есть и как расположен контент внутри тегов?
 
Нужен универсальный, можно взять хоть код данной страницы
 
Заменяет на TEXT содержимое тегов за исключением указанных.
Код:
<?
$text=<<<EOF
<html>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link/>
<title>Sample</title>
</head>
<body>
<h1 class="zzz">Note</h1>
<p>
This page is sample
</p>
</body> 
</html>
EOF;

$notreplaced=array('meta','title','link','javascript');
preg_match_all('~<([^/>]+)>([^>]+)<\/[^>]+>~U',$text,$out,PREG_SET_ORDER);
foreach($out as $k=>$v)    if(!in_array($v[1],$notreplaced)) $text=str_replace($v[2],'TEXT',$text);
echo $text;
?>
 
Помогите с шаблоном регулярки под preg_match_all. Надо подсчитать количество неактивных ссылок в тексте (т.е. a href) нету - только
Код:
http://...... https://.....
, но не учитывать те в которых упомянут определенный домен .т.е например все неактивные ссылки кроме yandex.ru Если бы не это условие, то можно было бы просто посчитать число вхождение http и https, а так - я что-то не могу сориентироваться
 
PHP:
preg_match_all('|http://(?!yandex.ru).*? |', $q, $matches);
 
Спасибо, но не совсем корректно работает. Смотрите, вот есть пример кода (от фонаря) с набором ссылок

Код:
$text="Развозные грузовики — это самые массовые, компактные и лёгкие грузовые автомобили, как правило, с пониженной погрузочной высотой. Большая часть выпускаемых в мире лёгких грузовиков и фургонов относится к классу N1, то есть их полная масса не должна превышать 3,5 т (в США — до 4,54 т), а грузоподъёмность, составляет до 1,5—1,8 т. Часто грузовики такого типа оснащают цельнометаллическим кузовом типа фургон вагонной или полукапотной компоновки со сдвижными боковыми дверями грузового отсека и распашными задними. Кстати, именно на базе таких фургонов выполнено большинство современных моделей автобусов особо малого класса (M1 и М2), называемых также микроавтобусами.<br />
<br />

http://google.com

Американская разновидность развозных фургонов (преимущественно почтовых) со сдвижными дверями водительской кабины и увеличенной высотой кузова, приспособленных для быстрого входа-выхода экспедитора называется мультистоп.<br />
<br />

http://mail.ru
<br />


Другим распространённым подвидом развозных грузовиков являются пикапы (от англ. pick-up — подбирать), представляющие собой либо модификацию легкового http://mail.ru автомобиля с открытой однобортовой грузовой платформой вместо задней части кузова (ныне распространены преимущественно в Европе), либо специально разработанную модель с шасси рамного типа (Северная и Южная Америки и страны Азии) и кабиной различной вместимости: http://yandex.ru от одинарной 2-3-местной до сдвоенной 5-6-местной. https://google.com В последней четверти XX века именно пикапы, ранее популярные преимущественно среди фермеров стали бестселлерами североамериканского автомобильного рынка (ежегодные продажи только одной модели Ford F-серии превышают 1 млн в год) http://google.com и в силу прожорливости своих многоцилиндровых (V8 и V10) бензиновых двигателей (дизели на грузовых автомобилях 1—3 http://yandex.ru классов грузоподъемности в США мало распространены) спровоцировали повышение https://yandex.ru нефтяных цен в 2000-е годы. В то же время подавляющую часть европейских и азиатских развозных грузовиков оснащают экономичными дизельными двигателями. В России развозные грузовики, фургоны и пикапы производят предприятия ГАЗ (семейства Соболь и Газель), УАЗ, «ИжАвто» и «ВАЗинтерСервис». http://yandex.ua";

preg_match_all('|http://(?!yandex.ru).*? |', $text, $out);

print_r($out);

Результат работы

Код:
Array
(
    [0] => Array
        (
            [0] => http://mail.ru
            [1] => http://google.com
        )

)

Т.е. не все учлось. И нету проверки на https :(
 
По правилу - последний урл не засчитался, потому что после него нету пробела, что символизирует окончание ссылки. А https не так сложно сделать

Код:
preg_match_all('#(http|https)://(?!yandex.ru).*? #s', $text, $out);
 
Назад
Сверху