2015-01-12 4 views
-1

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

link=text.scan(/(^|)(http.*)($|)/) 

, но проблема в том, когда связь находится в в середине он получает всю фразу до конца. Что мне делать?

ответ

1

Это потому, что .* рядом с http является жадным. Я предлагаю вам использовать образы.

link=text.scan(/(?<!\S)(http\S+)(?!\S)/) 

ИЛИ

link=text.scan(/(?<!\S)(http\S+)/) 

Пример:

> "http://bar.com foo http://bar.com bar http://bar.com".scan(/(?<!\S)http\S+(?!\S)/) 
=> ["http://bar.com", "http://bar.com", "http://bar.com"] 

DEMO

  • (?<!\S) Отрицательный просмотра назад, который утверждает, что матч не будет предшествовать по п на-пространстве.

  • http\S+ Соответствует подстроке http плюс следующие один или несколько символов пробела.

+0

thanx это прекрасно работает – Safouen

0

Содержит ли все ссылки, которые вы пытаетесь найти, в соответствии с простейшим шаблоном? Нам нужно будет больше контекста, чтобы уверенно обеспечить хорошее решение вашей проблемы.

Например, регулярное выражение:

link=text.scan(/http.*\.com/)

... может быть достаточно хорош для работы (это предполагает, что все ссылки заканчиваются на «.com»), но я не могу точно сказать, без дополнительной информации.

Или опять же, к примеру, может быть, вы могли бы использовать что-то вроде:

link=text.scan(/http[a-z./:]*) - это предполагает, что все ссылки содержат только строчные буквы, „/“ и „:“ «».

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