
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
понадобилась регулярка для замены ссылок вида http://site.ru или www.site.ru на кликабельную ссылку вида <a href...>
сам я в регулярках плохо шарю и поэтому решил первым делом поискать готовые решения. но почти все они с косяками,например ни в одном примере почему то не нашел такую регулярку которая бы НЕ заменяла текст в уже сформированной <a href ссылке. (не отрицаю что мог плохо искать!) отчаявшись начал изучать регулярки сам, кое как написал почти рабочий вариант (кстати процесс изучения то интересный оказался),но он мне в начало ссылки вставляет символ переноса. никак не знаю как его убрать оттуда. то есть например ссылку http://site.ru моё выражение заменит на <a href=" http://site.ru">http://site.ru</a> (обратить внимание тут типа перенос сразу после кавычки href=" http ) вот мой код:
|
![]() |
۩
Дата
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
хмм вроде получилось. всего лишь убрал \s| и оставил только ^
то есть так $text = preg_replace("#(^)http://[^\s\[<]+#i", а нет! блин! в таком случае тока заменяется если слово http:// стоит в самом начале строки. Это сообщение отредактировал Snake22 - 12.04.2013 - 12:59 |
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
$text = preg_replace('#(^|[^"])((?:www|http)[^\s]+\.\w\w)#i', |
![]() |
۩
Дата
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
OleKh спасибо. только всё равно в результатирующей ссылке перенос вставляется.
вот такой пример текста
то есть первая ссылка,которая начинается с начала строки,заменилась нормально без переноса.а в остальные строки вставился перенос. вот бы как нить к $0 применить trim Это сообщение отредактировал Snake22 - 12.04.2013 - 13:13 |
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
<br> - есть в исходном тексте |
||
![]() |
۩
Дата
|
||
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
но если строка будет такой $text='http://site1.ru http://site2.ru'; то вместо переноса вставится пробел в ссылку ,то есть <a href="_http://site2.ru" результат как то тримнуть надо Это сообщение отредактировал Snake22 - 12.04.2013 - 13:16 |
||
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
Ничего не вставится. Находится строка соответствующая шаблону, в данном случае http://site1.ru и заменяется на <a href=\" http://site1.ru\" target=_blank><u>http://site1.ru</u></a>. Остальное остается без изменений. |
||
![]() |
۩
Дата
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
странно
![]() код естественно целиком ваш скопировал. я даже наверное понимаю почему, то есть мы задаём условие искать слово http перед которым стоит пробельный символ, и в итоге это слово берётся вместе с пробельным сиволом. вот посмотрите скрин, красненьким выделил пробел. но при этом в первой ссылке пробела нет так как его нет перед словом http, потому что слово идёт первым в тексте. http://i1.imageban.ru/out/2013/04/12/4e08b...66025b0ab59.jpg Это сообщение отредактировал Snake22 - 12.04.2013 - 13:28 |
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
$text = preg_replace('#(^|[^"])((?:www|http)[^\s]+\.\w\w)#i',
перед которым может быть любой символ кроме ", чтобы исключить href="" |
||
![]() |
۩
Дата
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
OleKh о,спасибо! теперь кажется норм работает.
правда пробел теперь совсем сжирается но ниче это я и ручками подставить смогу ![]() |
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
Пожалуйста.
Где? Не понятно. |
||
![]() |
۩
Дата
|
||
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 19 Пользователь №: 35265 На форуме: Карма: ![]() |
между двумя ссылками $text='http://site1.ru http://site2.ru'; ну эт фигня))всё нормально <a href="http://site1.ru" target=_blank><u>http://site1.ru</u></a>ТУТ_ИСЧЕЗАЕТ_ПРОБЕЛ<a href="http://site2.ru" target=_blank><u>http://site2.ru</u></a><br><br> Это сообщение отредактировал Snake22 - 12.04.2013 - 14:21 |
||
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
<u>\$2</u></a> " |
||
![]() |
![]() ![]() ![]() |