Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Регулярное выражение: Как выбрать все ссылки без ббкода? (https://javascript.ru/forum/server/64655-regulyarnoe-vyrazhenie-kak-vybrat-vse-ssylki-bez-bbkoda.html)

rusbody 27.08.2016 16:14

Регулярное выражение: Как выбрать все ссылки без ббкода?
 
Есть регулярное выражение:
$text = preg_replace("~(?<!\[url\])((http|https|ftp|ftps)://)([а-яА-Яa-zA-Z.\/0-9-+_?=&%\#;])+~siu", '[url]$0[/url]', $text);


Которое ищет все ссылки на странице без тэга и оборачивает их в код. Чтобы не оборачивать уже обёрнутую ссылку, добавлено отрицание тэга
(?<!\[url\])


Проблема возникла с тэгами
[url=ссылка]ссылка[/url]
. Отрицание
(?<!\[url\])
не помогает.

Как быть?

laimas 27.08.2016 16:28

Цитата:

Сообщение от rusbody
ищет все ссылки на странице без тэга

И откуда они эти ссылки, если другие оформлены "по правилам"?

freethetan 27.08.2016 21:13

А как на счет ссылок с "relative uri"?
Не проще искать tags|properties с url указателем?
Дальше проще...
выборка всего что в скобках...

warren buffet 30.08.2016 10:14

Цитата:

Сообщение от laimas
ткуда они эти ссылки

Написал вручную и все.

laimas 30.08.2016 13:10

Цитата:

Сообщение от warren buffet
Написал вручную и все.

Ну а далее? Есть ссылки оформленные ВВ тегом, а есть нет. Вопрос - правильно ли все под одну гребенку не считаясь с тем, что пользователь хотел именно так как ввел?

А такое паскудство наблюдается не только со ссылками, но еще и :) превращает в рожицу, хотя написанное двоеточие и закрывающая скобка не обязательно означает ввод пользователем смайла.

Я без тебя прекрасно понимаю откуда они. Это вопрос автору для "задуматься".

psiklop 07.09.2016 01:23

держи:
$text = preg_replace("~(\[url(?U)(=.*)?\])?((http|https|ftp|ftps)://)([а-яА-Яa-zA-Z.\/0-9-+_?=&%\#;]+)(\[\/url\])?~siu", '[url$2]$3$5[/url]', $text);


Часовой пояс GMT +3, время: 19:20.