У меня есть твиттер-URL, которые могут принимать следующие форматы:
urls = [ "https://twitter.com/TwitterDev/status/850006245121695744", "http://twitter.com/TwitterDev/status/850006245121695744", "twitter.com/TwitterDev/status/850006245121695744", "https://www.twitter.com/TwitterDev/status/850006245121695744", "http://www.twitter.com/TwitterDev/status/850006245121695744", "www.twitter.com/TwitterDev/status/850006245121695744", "m.twitter.com/TwitterDev/status/850006245121695744", ]
Я хочу получить имя пользователя "TwitterDev" из любого из вышеперечисленных.Как я могу получить слова / цифры / символы [sic] после ".com/" до следующего "/"?
"TwitterDev"
".com/"
"/"
В соответствии с точной спецификацией, которую вы упомянули.
urls.map{|url| url.split(".com/", 2).last.split("/", 2).first} # => ["TwitterDev", "TwitterDev", "TwitterDev", "TwitterDev", "TwitterDev", "TwitterDev", "TwitterDev"]
Я не могу написать ruby, но это то, что я получаю из автоматически сгенерированного кода с сайта regex101.com с моим регулярным выражением (?<=\.com\/)([a-zA-Z0-9]+)(?=\/), используя просмотр и оглядывающийся подход.Он просто захватывает часть строки, которая имеет .com/ до и / после нее.
(?<=\.com\/)([a-zA-Z0-9]+)(?=\/)
.com/
/
re = /(?<=\.com\/)([a-zA-Z0-9]+)(?=\/)/m str = '-https://twitter.com/TwitterDev/status/850006245121695744 -http://twitter.com/TwitterDev/status/850006245121695744 -twitter.com/TwitterDev/status/850006245121695744 -https://www.twitter.com/TwitterDev/status/850006245121695744 -http://www.twitter.com/TwitterDev/status/850006245121695744 -www.twitter.com/TwitterDev/status/850006245121695744 -m.twitter.com/TwitterDev/status/850006245121695744 ' # Print the match result str.scan(re) do |match| puts match.to_s end
РЕДАКТИРОВАНИЕ: Самый чистый и быстрый способ с использованием (?<=twitter\.com\/)[^\/]+
(?<=twitter\.com\/)[^\/]+