Конкурс! Самая красивая реализация. Приз: 200 я.д.

12
psylosss
На сайте с 23.12.2005
Offline
126
1000

Всем желающим посостязаться в искусстве мышления и программирования, приглашаю принять участие в маленьком конкурсе.

Суть: написать функцию, которая принимает в качестве аргумента строку (текст), и возвращает этот же текст, в котором все URLы заменены на bbcode-урлы [_URL]протокол://найденный урл[/_URL]. При этом важным обстоятельством является то, что в тексте уже могут быть bbcode-урлы; их в этом случае, естественно, заменять уже не нужно.

Оцениваются следующие критерии:

- универсальность решения (используя замысловатые тесты)

- ресурсоемкость (на глазок, хотя можно и замерить программно)

- красота идеи и реализации

Победитель конкурса получит приз в 200 я.д. (или 200WMR, по желанию).

Если возникли вопросы, с удовольствием на них отвечу.

psylosss добавил 09.06.2008 в 18:10

P.S. пока писал, сам придумал красивое решение :)

Веб-разработка. Сложные проекты. Проектирование. Проект-менеджмент. Стартапы.
R.Major
На сайте с 23.03.2008
Offline
25
#1
psylosss:
psylosss добавил 09.06.2008 в 18:10
P.S. пока писал, сам придумал красивое решение :)

Регулярки уже не рулят?

Пишу на PHP (+JS) (/ru/forum/507055)
S
На сайте с 28.10.2005
Offline
296
#2

Чорт, 200р. сорвалос! ;(

D
На сайте с 14.01.2007
Offline
153
#3

все ждём красивого решения :)

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#4

Заменяем любой урл на bbcode представление,

затем удаляем дубликаты вида [_URL][_URL]

$content = preg_replace('/([a-z]+:\/\/[a-z\.]+)/is', '$1', $content);		
$content = preg_replace('/\[URL\]\s*\[URL\]/Uis', '', $content);
$content = preg_replace('/\[\/URL\]\s*\[\/URL\]/Uis', '
', $content);

Итого три замены.

Можно упростить до двух (наверное).

psylosss
На сайте с 23.12.2005
Offline
126
#5
R.Major:
Регулярки уже не рулят?

рулят, конечно. Жду решения ;)

semenov:
Чорт, 200р. сорвалос! ;(

почему сорвалось? Пока что не предложено ни одного решения.

Dinozavr:
все ждём красивого решения

именно!

Алексей Барыкин:
Заменяем любой урл на bbcode представление,
затем удаляем дубликаты вида [_URL][_URL]

Моя идея точно такая же :) Пока это единственное предложенное решение, и на данный момент вы лидируете :) Выскажу только свои соображения: если урлы встречаются не только внутри bbcode-тега [_URL], а еще и в других (например, [_IMG] или [_YT]), то приходится отслеживать это дело для каждого тега).

Как мне видится идеальное решение - вообще не заменять вне BB-тегов. Итак, конкурс продолжается :)

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#6
psylosss:

Моя идея точно такая же :) Пока это единственное предложенное решение, и на данный момент вы лидируете :) Выскажу только свои соображения: если урлы встречаются не только внутри bbcode-тега [_URL], а еще и в других (например, [_IMG] или [_YT]), то приходится отслеживать это дело для каждого тега).

Как мне видится идеальное решение - вообще не заменять вне BB-тегов. Итак, конкурс продолжается :)

Если решение в один прогон будет - то я выиграю? 😂

А вот и оно:

$content = preg_replace('/(\[URL\]*|\s*)([a-z]+:\/\/[a-z\.]+)(\[\/URL\]*|\s*)/is', '$2', $content);

Пояснение:

(\[URL\]*|\s*) - ищем bbcode тег или любое кол-во пробелов.

В зависимости от входных данных может понадобиться легкая доработка напильником.

psylosss
На сайте с 23.12.2005
Offline
126
#7
Алексей Барыкин:
Если решение в один прогон будет - то я выиграю?

Если никем не будет предложено решения, позволяющего не заменять урлы внутри тегов, то да

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#8
psylosss:
Если никем не будет предложено решения, позволяющего не заменять урлы внутри тегов, то да

Уже предложено. См. выше.

psylosss
На сайте с 23.12.2005
Offline
126
#9

Алексей Барыкин, что ж, пытался придраться, не получилось :) Давайте кошелек в личку. Напильником сам допилю :)

Конкурс завершен. Победитель - Алексей Барыкин! Всем участникам спасибо :)

Kolyaj
На сайте с 28.03.2006
Offline
69
#10
Алексей Барыкин:
(\[URL\]*|\s*) - ищем bbcode тег или любое кол-во пробелов.

Вообще-то вы конструкцией вида \[URL\]* ищете строки "[URL", "
" title="]"...
" target="_blank">]"...
" title="", "
" title="]"...
" target="_blank">]"...
" target="_blank">", "
" title="]"...
" target="_blank">]"...

12

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