Есть строка $text = preg_replace('/<a([^>]+)>/i', '<a\\1 rel="nofollow">', $text);
мне нужно написать обратную, что бы вырезать rel="nofollow".
Помогите если знаете. Я все собираюсь подучить рег.выр., но все как то время на это не хватает ((
Есть строка $text = preg_replace('/<a([^>]+)>/i', '<a\\1 rel="nofollow">', $text);
мне нужно написать обратную, что бы вырезать rel="nofollow".
Помогите если знаете. Я все собираюсь подучить рег.выр., но все как то время на это не хватает ((
Комментарии
А просто заменой? На сколько я понял твоя режет только символы )"
Советую http://www.regexbuddy.com/ или есть аналогичные online сервисы
Ну вот хотя бы http://www.cuneytyilmaz.com/prog/jrx/
Что-то типа этого, вроде не ошибся:
Мне именно в линках надо вырезать, остальной текст не трогать. Спасибо за ссылки, может там найду искомое.
Знаете, посмотрел ссылки, я как новичек в этом вышел с тех страниц в еще больших непонятках.
Но кое что сформулировал за это время.
1. Мне надо найти все ссылки в которых нет никакого rel и втавить туда rel="nofollow"
2. Пройтись по всем ссылках, и где присутсвует rel="follow" заменить на пустое.
Это для того что бы для всех ссылок сайта сделать rel="nofollow", но редактор и посвященные люди могли дописывать rel="follow", которое в итоге в фильтре убивает rel="nofollow".
Можно 2 строчки, не обезательно одно рег. выр.
Тогда примерно так (по удалению rel=):
для пункта 2 выражение следующее
preg_replace('/<a(.*?)(rel="follow")(.*?)>/i','<a\\1\\3>',$text);
осталось первое родить, но не умею.
не знаю как тут код вставлять, сильно ломается всё ((
Для написания регекспов пользуюсь софтинкой Regex Coach. Имхо, очень удобная. Там же, на сайте, есть мануал по ней (на английском).
.
чесслово не понял а почему нельзя просто поиск и замена?
ну да, 2 раза запускать придется, но делов то...
Примерчик можно взглянуть, где 2 раза? Только с условием, что он корректно работает...
> чесслово не понял а почему нельзя просто поиск и замена?
потому что только в ссылках дописывать или чистить надо, в остальных тегах и просто в тексте не трогаем.
Для пункста 2 выражение мне написали, которое работает, для первого пункта осталось. Помогите кто чем сможете )
Всем спасибо, кто приложился.
Пойду поизучаю сайт Regex Coach
Может картинку в подписи уберем?
1. Мне надо найти все ссылки в которых нет никакого rel и втавить туда rel="nofollow"
2. Пройтись по всем ссылках, и где присутсвует rel="follow" заменить на пустое.
вот написано как два раза
или нужно рассказать как (например в дримвьюере) выполнить замену?
"дримвьюере" присутствует в поставке drupal? Или он может в динамическом контенте это делать. Короче - примера нет...
Угу, можно, давно собирался. И другим мешает?:)
Если кто то хочет помочь, постучитесь в icq 1331818. или yahoo onic2003. не знаю чем отблагодарить. номерок Аси 7 знаков но симпотный где то завалялся )) сроки жмут (( смотрел Regex Coach и подобные, они для отладки хороши, но не для тех кто в этом дуб-дерево ((
1. Требуется найти все ссылки в которых нет никакого rel= и втавить туда rel="nofollow"
2. Пройтись по всем ссылках, и где присутсвует rel="follow" заменить на пустое.
На выходе у нас все ссылки будут или с rel="nofollow" или без rel="follow".
Это для того что бы для всех ссылок сайта сделать rel="nofollow", за исключением тех где редактор дописал rel="follow", которое дает команду не вставлять rel="nofollow".
Решение:
1. (его еще нет)
2.
$text = preg_replace('/<a rel="follow"([^>]+)>/i','<a \\1 >',$text);
- это работает.Если видите другой хороший вариант, я рассмотрю.
Я не знаток регулярных выражений, понимаю их и могу написать простенькое, но любую задачу можно решить без них, они лишь для упрощения кода служат, плюс возможно иногда сложно написать быстро работающие алгоритмы, но данный случай как раз простой, код буду писать сейчас так сказать realtime, так что попробуйте разобраться в логике, и если где-то сделаю опечатку, поправте сами, )) Ну вот приступим:
не уверен на счёт правильности, но если автор 5 лет пишет регулярки оставте лучше это выражение ))
мой способ это найти все открывающие теги a проверить на есть ли там атрибут rel если нет выполнить первое задание, если rel есть и значение nofollow не трогаем в противном случае какое бы там значение не стояло удаляем без проверки. Впринципе ваше задание понял так должно быль либо nofollow либо не быть атрибута rel вообще... да и ещё предполагаю что поиск нужен был в переменной $content... + ещё подразумевается что атрибут rel может быть в теге единожды, технически-то можно написать и два раза........ если надо то можно додумать... так же если будет совпадение, в значение другого атрибута, то он обрежется, например, title="seper rel=10", обрежется именно rel=, я могу доработать код, но сначала проверь
$tmpArr = explode('<a ', $content);
for ($i = 1; $i < count($tmpArr); $i++) {
$tmpArr2 = explode('>', $content);
if (eregi('rel=', $tmpArr2[0])) {
$tmpArr3 = explode('rel=', $content);
$tmpStrAtrb = substr($tmpArr3[1], strpos($tmpArr3[1], ' '));
if (!eregi('nofollow', $tmpArr2[0])) {
$tmpArr2[0] = str_replace(('rel=' . $tmpStrAtrb), '', $tmpArr2[0]);
}
} else {
$tmpArr2[0] .= ' rel="nofollow" ';
}
$tmpArr[$i] = implode('>', $tmpArr2);
}
$content = implode('<a ', $tmpArr);
?>
кстати лехким пишестя легким )) к тому же не думаю что оно легкое... но это однако только моё мнение ))
Есть модуль http://drupal.org/project/nofollowlist
Он по "черному списку" расставляет nofollow, а по "белому" - убирает.
Может кому поможет для самообразования: http://www.intuit.ru/department/se/regperl/
Ох, читаю эту тему 13 лет спустя в сам в шоке от моего вопроса. Всем спасибо кто тогла помог.