Регулярка. Поиск с исключением

S2
На сайте с 02.06.2006
Offline
100
678

Возникла необходимость закрыть от индексации все ссылки кроме некоторого типа. Не спрашивайте зачем - не моя затея, но реализовывать мне :)

Имеем страницу со ссылками. Пример:

<a href="lalala/CID_1.html">Ссылка 1</a>
<a href="lalala/FID_2.html">Ссылка 2</a>

Нужно закрыть от индексации все ссылки кроме ссылок на категории (содержат "CID").

Обратной задачи добился :). Т.е. закрываются только ссылки, содержащие "CID".

$ex = '<a href="lalala/CID_1.html">Ссылка 1</a> <a href="lalala/FID_2.html">Ссылка 2</a>';
echo preg_replace ('!<a([^<]*)href="([^<]*CID[^<]*)"([^<]*)>([^<]*)</a>!is', '<noindex><a$1href="$2"$3>$4</a></noindex>', $ex);

Весь день бьюсь, решение не могу найти. В регулярках не силен :)

M
На сайте с 15.03.2012
Offline
101
#1

можно циклом пройтись по всем выбранным <a href....>...</a> и те что не имеют CID пихать в noindex

siv1987
На сайте с 02.04.2009
Offline
427
#2

I


$ex = '<a href="lalala/CID_1.html">Ссылка 1</a>
<a href="lalala/FID_2.html">Ссылка 2</a>';

preg_match_all('#<a([^>]+)href="([^"]+)"([^>]*)>([^<]*)</a>#i', $ex, $out);
for($i=0; $i<count($out[0]); $i++)
{
$u = array();
if( ! strpos($out[0][$i], '/CID_') )
{
$u = array( 1 => $out[1][$i],
2 => $out[2][$i],
3 => $out[3][$i],
4 => $out[4][$i]
);

$ex = str_replace( $out[0][$i], "<noindex><a{$u[1]}href=\"{$u[2]}\"{$u[3]}>{$u[4]}</a></noindex>", $ex );
}
}

echo $ex;

II


$ex = '<a href="lalala/CID_1.html">Ссылка 1</a>
<a href="lalala/FID_2.html">Ссылка 2</a>';

echo preg_replace ('#<a([^>]+)href="([^"]+?/(?:FID|GID|OTHER)_[^"]+)"([^<]*)>([^<]*)</a>#is', '<noindex><a$1href="$2"$3>$4</a></noindex>', $ex);
N
На сайте с 28.03.2009
Offline
39
#3

$ex = preg_replace('|(<a href="[^"]+?(?:/[^C]?ID)[^"]+">[^<]+</a>)|s', "<noindex>$1</noindex>", $ex);
S2
На сайте с 02.06.2006
Offline
100
#4

Всем спасибо, остановился на варианте Nexter'а с небольшими изменениями. Универсально и быстро работает. str_replace все портит

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий