RegExp для добавления аттрибутов к ссылке

Статус
В этой теме нельзя размещать новые ответы.

Xacret.T

Постоялец
Регистрация
2 Июн 2006
Сообщения
146
Реакции
36
Вот столкнулся с необходимость немного "подчистить" (отредактировать) ссылки, публикуемые во всех новостях.

необходимо использовать плагин find&replace, но, к сожалению, я не шарю в регулярных выражениях и посему прошу помощи и форумчан.

мне необходимо сделать следующее:
1. найти все ссылки <a ...>...</a> и добавить аттрибут rel="nofollow"
ссылка может иметь любой набор аттрибутов, например, может быть прописан title, а может быть и не прописан - так что rel писать нужно последним аттрибутом
2. все найденные ссылки нужно заключить в тег <noindex>ссылка</noindex>

P.S.: плагин find and replace можно взять здесь: Для просмотра ссылки Войди или Зарегистрируйся

Заранее большое спасибо за внимание.

Добавлено через 22 минуты
и еще, по возможность, помогите составить регэкспу полностью удаляющую все ссылки, но оставляющую внутритеговый текст (между <a...> и </a>)
 
начнем с конца:
PHP:
{exp:replace find="<a[^>]*href=QUOTE(.+)QUOTE[^>]*>(.*)<\/a>" replace="$2" regex="yes"}
{/exp:replace}
удаляет все ссылки, оставляет только текст.

2.
PHP:
{exp:replace find="(<a .*?)>(.*?)<\/a>" replace='<noindex>$1 target="_blank" rel="nofollow">$2</a></noindex>' regex="yes"}
<a href="http://nulled.ws" title="hello">Hello</a>
{/exp:replace}
Out - <noindex><a href="http://nulled.ws" title="hello" target="_blank" rel="nofollow">Hello</a></noindex>

А можно так (позволяет менять урл, например, добавить редирект:(
PHP:
{exp:replace find="(<a[^>]*href=)QUOTE(.+)QUOTE(.*?)>(.*?)<\/a>" replace='<noindex>$1"?URL=$2" $3 target="_blank" rel="nofollow">$4</a></noindex>' regex="yes"}
<a href="http://nulled.ws" title="hello">Hello</a>
{/exp:replace}

Out - <noindex><a href="?URL=http://nulled.ws" title="hello" target="_blank" rel="nofollow">Hello</a></noindex>

p.s. сейчас ломаю голову над мультизаменой с регулярными выражениями. Но данный скрипт не поддерживает мульти режим с включенным regex :( надо внутрь плагина будет лезть.
 
Большое спасибо.

по поводу мультизамены с регэкспом - обратись к девелоперу - он, я думаю, внесет изменения сам шустренько.

кстати, не пробовал вставлять regexp в переменные (ее/пхп) и подставлять как пораметры поиска при мултизамене???
или ты пробовал подставлять непосредственно выражения в параметр поиска???

я думаю там просто будет конфликт из-за разделителя |
 
я думаю там просто будет конфликт из-за разделителя |
Да, я тоже так думаю, что это невозможно из-за того, что | обрабатывается как часть рега . Поэтому и требуется внутреннее копание. У разработчика уже есть подобные вопрос в комментах еще от августа месяца.

p.s. да, плагин при наличии разделителей | и отключёнными регами, разбивает строку поиска и замены на части и вносит все это в массивы, а затем прогоняет замену в цикле по каждой позиции. То есть, все что нужно сделать, это определить альтернативный символ разделитель условия и внести его плагин, сделав дополнительную функцию обработки массива с preg_replace. Если вечером не забуду - сделаю :) Было бы очень удобно объединить несколько условий, например, обработку линков + вытягивания кода в одну строку (find='\f|\n|\r|\t|\x0B|\0' replace='' regex='yes'), без использования дополнительных шаблонов. Вот только интересно, как это скажется на производительности??
 
ну сейчас даже с помощью дополнительных шаблонов невозможно описать 2 регэкспа на один кусок кода - ведь нельзя же вкладывать в один поиск и замену еще и второй такой же тег. :nezn:

по поводу производительности - думаю ничего страшного не случится - если конечно не прописать поиска 10-20 регэкспов. :ah:
 
сделай простую замену
Код:
<a
на
Код:
<noindex><a
тож самое с закрывающимися тэгами
и
Код:
<a
на
Код:
<a rel="nofollow"

никакие регулярки не нужны, + нагрузка меньше будет
 
в принципе да, если не требуется сложных преобразований, то можно и без регулярок:
Код:
{exp:replace find='<a|href="|</a>' replace='<noindex><a rel="nofollow"|href="?URL=|</a></noindex>' multiple="yes"}
<a href="http://nulled.ws" title="hello">Hello</a>
{/exp:replace}
Out - <noindex><a rel="nofollow" href="?URL=http://nulled.ws" title="hello">Hello</a></noindex>
 
Немного доработал данный плагин напильником :). Теперь у него есть параметр clearcode='yes'.

Код:
пример
{exp:replace find='<a|href="|</a>' replace='<noindex><a rel="nofollow"|href="?URL=|</a></noindex>' multiple="yes" clearcode='yes'}
{/exp:replace}

у теста заключенного в теги удаляются(без регулярок:(
\t \n \vtab \r
 

Вложения

  • pi.replace.rar
    4 KB · Просмотры: 7
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху