Условие в парсере для своего URL

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

jcrush

Гуру форума
Регистрация
10 Ноя 2006
Сообщения
688
Реакции
59
Добрый день всем.

У меня есть парсер который режет все урлы:

PHP:
$text= preg_replace('[http://]', '', $text);
$text= preg_replace('[https://]', '', $text);
$text= preg_replace('[www.]', '', $text);

Мне необходимо чтобы это работало для всех урлов кроме урла с моим сайтом, как такое сделать?

Благодарю.
 
регулярки выше созданы неправильно - это первое.
ибо
$text= preg_replace('[http://]', '', $text);
кроме
"http://"
также означает "t:t//ph" или "//tpph://"
ну и т.д.
второе. небуду помогать готовым кодом т.к. для начинающих это зло.
Скажу что у меня алгоритм работает прмиерно так:
находит в коде ВСЕ <a href"..."> потом найденное пихает в массив.
потом анализирует на предмет:
1. пустоты или "#" (выкидывает их **х из массива)
2. ссылко типа "mailto:", "javascript" (по ситуации)
3. ссылок начнающихся не с http:// или https:// (это ВС)
почти все шо останется после этого есть локальные ссылки...
П.С. для баловства с регуляркой рекомендую Regex Coach (отличный софт для тренировки перед загоном в код)
 
Как умею, попробовал условия использовать, не работает =(
 
специально ломаем свой урл
$text= preg_replace('~(http)(s?://moidomen.ru)~is', 'httt\1', $text);
удаляем все остальные
$text= preg_replace('~(https?://)~is', '', $text);
восстанавливаем свой URL
$text= preg_replace('~(httt)(s?://moidomen.ru)~is', 'http\1', $text);

вот так сделай. там еще есть варианты с предусловием последующего кода,
но копай сам если хочешь правильно сделать :)
 
специально ломаем свой урл
$text= preg_replace('~(http)(s?://moidomen.ru)~is', 'httt\1', $text);
удаляем все остальные
$text= preg_replace('~(https?://)~is', '', $text);
восстанавливаем свой URL
$text= preg_replace('~(httt)(s?://moidomen.ru)~is', 'http\1', $text);

вот так сделай. там еще есть варианты с предусловием последующего кода,
но копай сам если хочешь правильно сделать :)
Изврат :)

"#(?:http\://)[^(?:moidomen\.ru)]#" примерно так. Может не работать :) Пишу по памяти :)
 
правда изврат, и не работает к тому же
 
вот текст
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);

мне надо убивать все ссылки кроме если в урле есть ссылка а мой сайт что еще надо?
 
вот текст
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);
$text= preg_replace('[Для просмотра ссылки Войди или Зарегистрируйся', '', $text);
мне надо убивать все ссылки кроме если в урле есть ссылка а мой сайт что еще надо?
Честно говоря, вобще не понятно причем тут текст который Вы предоставили Выше.
Если Вы хотите в тексте убрать все ссылки, кроме тех которые ссылаются на Ваш домен, тогда регулярное выражение должно быть
приблизительно таким:
PHP:
$text = 'это <a href="http://www.mysite.com/page1.html">ссылка на мой сайт</a> и другая <a href="http://www.notmysite.com/page1.html">ссылка не на мой сайт</a> и еще одна ссылка на <a href="http://www.mysite.com">мой</a> сайт';
echo preg_replace("#<a[^>]+href=\"http://(?!www\.mysite\.com)[^>]+>(.+)</a>#Usi","",$text);
 
PHP:
$text = preg_replace('%<a(.*?)</a>%ie', "clear('\\0');", $text); 
echo($text);

function clear($link) {
	if (false !== strpos($link, 'www.mysite.com')) {
		return $link;
	}
}

кстати еще такой код можно применить, вырезает все ссылки и прогоняет через функцию. Такой код можно использовать там, где будет сложность составления вышеприведенной регулярки (под субдоменам, по страницам и т.д.)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху