2013-03-06 3 views
-2

Существует множество решений для поиска и/или анализа обычных URL-адресов, но ни один из них не имеет дело с произвольным текстом, то есть URL-адресами, разделенными на несколько строк? Как вы найдете URL-адрес, который может иметь разрывы строк после любого символа?Как найти произвольные URL-адреса в виде обычного текста?

Примечание: меня не интересуют отдельные части URL-адреса. Я просто хочу найти все URL-адреса в заданном тексте, чтобы преобразовать их в ссылки (например, как в обычном тексте электронной почты).

Пример:

Text text text text text. Look at this: 
http://stackoverfl 
ow.com/ 
questions/15252042/ 
find-urls-in-text 

Question question question. 
+1

Примеры пожалуйста – alestanis

+0

Да, пожалуйста, дайте пример того, что вы говорите о –

+2

. Вы спрашиваете: «Как вы найдете URL-адрес, который может иметь разрывы строк после любого символа?» и я не думаю, что у вас есть надежный способ сделать это. Иногда данные дерьма - данные дерьма, и вы ничего не можете с этим поделать. –

ответ

0

несколько подходов возможны:

1) Написать регулярное выражение с пробельными правилами после каждого очередного символа. Это, безусловно, взорвет шаблон регулярных выражений, но является наиболее гибким. Для перехвата прерываний используйте режим DOT_ALL. Тем не менее, DOT_ALL создает те же проблемы, что и следующий подход.

2) (Временно) удалить разрывы строк и использовать нормальное соответствие шаблону регулярного выражения. Этот подход имеет проблемы, хотя может случиться так, что вы включаете больше текста, чем необходимо (в конце URL-адреса) или не найдете URL-адрес (если очередь строк находится в начале, испортить строку протокола).

2a) Модификация 2) может заключаться в том, чтобы выполнить несколько попыток совпадения, удаляя только определенные разрывы строк, например. после поиска начальной части URL (например, www, http и т. д.). Это возможно только в том случае, если время распознавания является вторичным.

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

3a) Вариант 3) может выглядеть специально для протокола и расширения страницы с использованием регулярного выражения с полными правилами пробелов, чтобы найти начало и конец URL-адреса. Это работает, очевидно, только в том случае, если всегда существует протокол/filename_with_extension. Преобразуйте найденные маркеры в обычные без пробелов (но включите пробел перед протоколом и после расширения), а затем удалите все разрывы строк в тексте. Теперь вы можете сопоставить URL с регулярным регулярным выражением.

Есть, конечно, больше вариантов, но общая идея такая же.

Смежные вопросы