Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрамление текстовых сcылок тегом <a> 
:(
    Опции темы
swordfishik
Дата 24.4.2016, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Написал регулярку, которая ищет и обрамляет текстовые ссылки тегом <a>, но регулярка захватывает рядом стоящие точки, запятые, это при случае если рядом с текстовой ссылкой идут эти символы. Фтп ссылок не будет, поэтому я не учел в регулярке. Мой пример можно посмотреть здесь - http://rubular.com/r/P04ZNa9Td6. Прошу помочь мне исправить этот момент. Благодарю!
PM MAIL   Вверх
igorold
Дата 24.4.2016, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



Никто ваш пример по ссылке смотреть не будет ... выкладывайте свой код сюда ...

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
swordfishik
Дата 24.4.2016, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Код

((https?\:\/\/|www\.)\S+)


проверял на этом тексте:
Код

Здесь находится ссылка, которую стоит обрамить http://test.com.

Здесь находится ссылка http://test.com, которую стоит обрамить.

Здесь находится http://test.com ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com.

Здесь находится ссылка https://test.com, которую стоит обрамить.

Здесь находится https://test.com ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/.

Здесь находится ссылка http://test.com/, которую стоит обрамить.

Здесь находится http://test.com/ ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/.

Здесь находится ссылка https://test.com/, которую стоит обрамить.

Здесь находится https://test.com/ ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category.

Здесь находится ссылка http://test.com/category, которую стоит обрамить.

Здесь находится http://test.com/category ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category.

Здесь находится ссылка https://test.com/category, которую стоит обрамить.

Здесь находится https://test.com/category ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category/.

Здесь находится ссылка http://test.com/category/, которую стоит обрамить.

Здесь находится http://test.com/category/ ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category/.

Здесь находится ссылка https://test.com/category/, которую стоит обрамить.

Здесь находится https://test.com/category/ ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category.html.

Здесь находится ссылка http://test.com/category.html, которую стоит обрамить.

Здесь находится http://test.com/category.html ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category.html.

Здесь находится ссылка https://test.com/category.html, которую стоит обрамить.

Здесь находится https://test.com/category.html ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category.php.

Здесь находится ссылка http://test.com/category.php, которую стоит обрамить.

Здесь находится http://test.com/category.php ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category.php.

Здесь находится ссылка https://test.com/category.php, которую стоит обрамить.

Здесь находится https://test.com/category.php ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/?page=5&id=1.

Здесь находится ссылка http://test.com/?page=5&id=1, которую стоит обрамить.

Здесь находится http://test.com/?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/?page=5&id=1.

Здесь находится ссылка https://test.com/?page=5&id=1, которую стоит обрамить.

Здесь находится https://test.com/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category?page=5&id=1.

Здесь находится ссылка http://test.com/category?page=5&id=1, которую стоит обрамить.

Здесь находится http://test.com/category?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category?page=5&id=1.

Здесь находится ссылка https://test.com/category?page=5&id=1, которую стоит обрамить.

Здесь находится https://test.com/category?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category/?page=5&id=1.

Здесь находится ссылка http://test.com/category/?page=5&id=1, которую стоит обрамить.

Здесь находится http://test.com/category/?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category/?page=5&id=1.

Здесь находится ссылка https://test.com/category/?page=5&id=1, которую стоит обрамить.

Здесь находится https://test.com/category/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category.html?page=5&id=1.

Здесь находится ссылка http://test.com/category.html?page=5&id=1, которую стоит обрамить.

Здесь находится http://test.com/category.html?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category.html?page=5&id=1.

Здесь находится ссылка https://test.com/category.html?page=5&id=1, которую стоит обрамить.

Здесь находится https://test.com/category.html?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://test.com/category.php?page=5&id=1.

Здесь находится ссылка http://test.com/category.php?page=5&id=1, которую стоит обрамить.

Здесь находится http://test.com/category.php?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://test.com/category.php?page=5&id=1.

Здесь находится ссылка https://test.com/category.php?page=5&id=1, которую стоит обрамить.

Здесь находится https://test.com/category.php?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com.

Здесь находится ссылка www.test.com, которую стоит обрамить.

Здесь находится www.test.com ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category.

Здесь находится ссылка www.test.com/category, которую стоит обрамить.

Здесь находится www.test.com/category ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category/.

Здесь находится ссылка www.test.com/category/, которую стоит обрамить.

Здесь находится www.test.com/category/ ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category.html.

Здесь находится ссылка www.test.com/category.html, которую стоит обрамить.

Здесь находится www.test.com/category.html ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category.php.

Здесь находится ссылка www.test.com/category.php, которую стоит обрамить.

Здесь находится www.test.com/category.php ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/?page=5&id=1.

Здесь находится ссылка www.test.com/?page=5&id=1, которую стоит обрамить.

Здесь находится www.test.com/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category?page=5&id=1.

Здесь находится ссылка www.test.com/category?page=5&id=1, которую стоит обрамить.

Здесь находится www.test.com/category?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category/?page=5&id=1.

Здесь находится ссылка www.test.com/category/?page=5&id=1, которую стоит обрамить.

Здесь находится www.test.com/category/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category.html?page=5&id=1.

Здесь находится ссылка www.test.com/category.html?page=5&id=1, которую стоит обрамить.

Здесь находится www.test.com/category.html?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить www.test.com/category.php?page=5&id=1.

Здесь находится ссылка www.test.com/category.php?page=5&id=1, которую стоит обрамить.

Здесь находится www.test.com/category.php?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com.

Здесь находится ссылка http://www.test.com, которую стоит обрамить.

Здесь находится http://www.test.com ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com.

Здесь находится ссылка https://www.test.com, которую стоит обрамить.

Здесь находится https://www.test.com ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/.

Здесь находится ссылка http://www.test.com/, которую стоит обрамить.

Здесь находится http://www.test.com/ ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/.

Здесь находится ссылка https://www.test.com/, которую стоит обрамить.

Здесь находится https://www.test.com/ ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category.

Здесь находится ссылка http://www.test.com/category, которую стоит обрамить.

Здесь находится http://www.test.com/category ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category.

Здесь находится ссылка https://www.test.com/category, которую стоит обрамить.

Здесь находится https://www.test.com/category ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category/.

Здесь находится ссылка http://www.test.com/category/, которую стоит обрамить.

Здесь находится http://www.test.com/category/ ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category/.

Здесь находится ссылка https://www.test.com/category/, которую стоит обрамить.

Здесь находится https://www.test.com/category/ ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category.html.

Здесь находится ссылка http://www.test.com/category.html, которую стоит обрамить.

Здесь находится http://www.test.com/category.html ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category.html.

Здесь находится ссылка https://www.test.com/category.html, которую стоит обрамить.

Здесь находится https://www.test.com/category.html ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category.php.

Здесь находится ссылка http://www.test.com/category.php, которую стоит обрамить.

Здесь находится http://www.test.com/category.php ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category.php.

Здесь находится ссылка https://www.test.com/category.php, которую стоит обрамить.

Здесь находится https://www.test.com/category.php ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/?page=5&id=1.

Здесь находится ссылка http://www.test.com/?page=5&id=1, которую стоит обрамить.

Здесь находится http://www.test.com/?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/?page=5&id=1.

Здесь находится ссылка https://www.test.com/?page=5&id=1, которую стоит обрамить.

Здесь находится https://www.test.com/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category?page=5&id=1.

Здесь находится ссылка http://www.test.com/category?page=5&id=1, которую стоит обрамить.

Здесь находится http://www.test.com/category?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category?page=5&id=1.

Здесь находится ссылка https://www.test.com/category?page=5&id=1, которую стоит обрамить.

Здесь находится https://www.test.com/category?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category/?page=5&id=1.

Здесь находится ссылка http://www.test.com/category/?page=5&id=1, которую стоит обрамить.

Здесь находится http://www.test.com/category/?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category/?page=5&id=1.

Здесь находится ссылка https://www.test.com/category/?page=5&id=1, которую стоит обрамить.

Здесь находится https://www.test.com/category/?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category.html?page=5&id=1.

Здесь находится ссылка http://www.test.com/category.html?page=5&id=1, которую стоит обрамить.

Здесь находится http://www.test.com/category.html?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category.html?page=5&id=1.

Здесь находится ссылка https://www.test.com/category.html?page=5&id=1, которую стоит обрамить.

Здесь находится https://www.test.com/category.html?page=5&id=1 ссылка, которую стоит обрамить.


Здесь находится ссылка, которую стоит обрамить http://www.test.com/category.php?page=5&id=1.

Здесь находится ссылка http://www.test.com/category.php?page=5&id=1, которую стоит обрамить.

Здесь находится http://www.test.com/category.php?page=5&id=1 ссылка, которую стоит обрамить.

Здесь находится ссылка, которую стоит обрамить https://www.test.com/category.php?page=5&id=1.

Здесь находится ссылка https://www.test.com/category.php?page=5&id=1, которую стоит обрамить.

Здесь находится https://www.test.com/category.php?page=5&id=1 ссылка, которую стоит обрамить.


Это сообщение отредактировал(а) swordfishik - 24.4.2016, 20:17
PM MAIL   Вверх
igorold
Дата 25.4.2016, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



((https?\:\/\/|www\.)[^\.\s,]+(\.[^\.\s,]+)+)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ksnk
Дата 25.4.2016, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



А еще концом предложения могут быть восклицательные и вопросительные знаки  smile Про три восклицательных знака лучше не будем... 
А в параметрах бывает вообще ужас-ужас... например две точки подряд.
Код

$x=<<<TXT
Здесь находится https://www.test.com/category.php?url=..&id=1 ссылка, которую стоит обрамить.
А тут бывали - www.google.com?
Не пропусти www.site.ru!
TXT;
$reg='~((?:https?\://|www\.)\S+?)([!\?.,])?\s~si';

echo preg_replace($reg,'[url]\1[/url]\2 ',$x);

Тут, правда, будет конфуз, если последними символами текста окажется именно ссылка, без финального пробельного символа.
Ну и, очевидно, отсутствует даже минимальный контроль за корректностью ссылки.

Если нужен "корректный" урл, то лучше что-то вроде такого ( откуда-то с хабра стащил урл проверки):
Цитата

URL на латинице. Если нужно распознавать и кириллические домены, необходимо изменить все «a-z0-9» на «а-яёa-z0-9» и добавить в список доменных зон «рф» (от kvf77):
~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&?+=\~/-]*)?(?:#[^ '\"&]*)?$~i




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
igorold
Дата 25.4.2016, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



ksnk, ну по тому заданию, что задал топикстартер, моё выражение работает ... понятно, что я написал по принципу, что спросил, то и ответил ...  smile 

а в остальном - да в ссылке может мого чего наворочано ...


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
swordfishik
Дата 25.4.2016, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



спасибо всем за ответы smile

исправил свою регулярку на такую:
Код
(((?:ht|f)tps?\:\/\/|www\.)\S+\w\/?)


был такой вариант также:
Код
(((?:ht|f)tps?\:\/\/|www\.)\S+[\w\/])


Результат одинаков, а какой лучше, не пойму.

Как видно из регулярки я добавил еще и ФТП, пусть все же будет. Но после добавления пришлось добавить ?: перед ht, помогло избавится от лишнего элемента в массиве (подсмотрел где-то на форуме). Правильно сделал? Нигде не нашел объяснения этому "хаку".

По поводу работы регулярки - протестировал текущую на том же объеме данных, выделяет все как нужно, даже если к ссылке примыкает кириллический текст или другие символы ,.! и т.д.

Это сообщение отредактировал(а) swordfishik - 25.4.2016, 10:10
PM MAIL   Вверх
ksnk
Дата 25.4.2016, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



Цитата(swordfishik @  25.4.2016,  10:09 Найти цитируемый пост)
Нигде не нашел объяснения этому "хаку".

Как это - нигде? А здесь?

Чтобы проверить регулярку - можно поставить несколько синтетических ссылок и несколько из "реальной жизни"
Код

$x=<<<TXT
Здесь находится https://www.test.com/category.php?url=..&id=1 ссылка, которую стоит обрамить.
А тут бывали - www.google.com?
Не пропусти www.site.ru!
Ссылка на статью в википедии - https://ru.wikipedia.org/wiki/PHP#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F
Ссылка на результат поиска в гугле - 
https://www.google.ru/search?q=wiki+php&rlz=1C1CHHP_ruRU466RU466&oq=wiki+php&aqs=chrome..69i57j0l5.2497j0j7&sourceid=chrome&ie=UTF-8
Ссылка, на которой сломается регулярка - www.site.ru?par=*,
TXT;


Это сообщение отредактировал(а) ksnk - 25.4.2016, 11:26


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
swordfishik
Дата 25.4.2016, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



ksnk, спасибо за ссылку на материал

насчет парсинга ссылок, никто не будет вставлять ссылки с Вики, с Гугла и прочего, даже сокращенные ссылки не будут фигурировать, это я точно знаю.

ссылки будут ставится максимум на сайт, раздел сайта, на страницу сайта, на файл лежащий на публичном фтп
PM MAIL   Вверх
79535149060
Дата 25.4.2016, 18:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Модератор: Сообщение скрыто.

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1591 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.