Regex, чтобы удалить текст перед "http://"? - PullRequest
1 голос
/ 30 июля 2009

У меня есть приложение ruby, анализирующее кучу URL-адресов из строк:

@text = "a string with a url http://example.com"

@text.split.grep(/http[s]?:\/\/\w/)

@text[0] = "http://example.com"

Это отлично работает ^^

Но иногда URL-адреса имеют текст перед HTTP: // например

@text = "What's a spacebar? ...http://example.com"

@text[0] = "...http://example.com"

Есть ли регулярное выражение, которое может выделить только текст перед "http://" в строке, чтобы я мог его убрать?

Ответы [ 5 ]

10 голосов
/ 30 июля 2009

Возможно, лучший способ добиться того же результата - использовать стандартную библиотеку URI.

require 'uri'
text = "a string with a url http://example.com and another URL here:http://2.example.com and this here"
URI.extract(text, ['http', 'https'])
# => ["http://example.com", "http://2.example.com"]

Документация: URI.extract

6 голосов
/ 30 июля 2009

Разделение и затем grepping - странный способ сделать это. Почему бы вам не использовать String # scan :

@text = "a string with a url http://example.com"
urls = @text.scan(/http[s]?:\/\/\S+/)
url[0]  # => "http://example.com"
1 голос
/ 30 июля 2009
.*(?=http://)
0 голосов
/ 30 июля 2009

Просто найдите http://, и удалите части строки до этого (так как = ~ возвращает смещение в строку)

0 голосов
/ 30 июля 2009

или вы могли бы объединить два.

.*(?=(f|ht)tp[s]://)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...