Ruby アプリケーションで次の正規表現コードを使用して HTTP リンクを照合しようとしていますが、無効な出力が生成され、リンクの後ろにピリオド (場合によってはピリオドと単語) が追加され、Web 上でテストすると無効になります。
URL_PATTERN = Regexp.new %r{http://[\w/.%-]+}i
<input>.to_s.scan( URL_PATTERN ).uniq
リンクをスキャンするための上記のコードに問題はありますか?
アプリからのコード:
require 'bundler/setup'
require 'twitter'
RECORD_LIMIT = 100
URL_PATTERN = Regexp.new %r{http://[\w/.%-]+}i
def usage
warn "Usage: ruby #{File.basename $0} <hashtag>"
exit 64
end
# Ensure that the hashtag has a hash symbol. This makes the leading '#'
# optional, which avoids the need to quote or escape it on the command line.
def format_hashtag(hashtag)
(hashtag.scan(/^#/).empty?) ? "##{hashtag}" : hashtag
end
# Return a sorted list of unique URLs found in the list of tweets.
def uniq_urls(tweets)
tweets.map(&:text).grep( %r{http://}i ).to_s.scan( URL_PATTERN ).uniq
end
def search(hashtag)
Twitter.search(hashtag, rpp: RECORD_LIMIT, result_type: 'recent')
end
if __FILE__ == $0 usage unless ARGV.size >= 1
hashtag = format_hashtag(ARGV[0])
tweets = search(hashtag)
puts uniq_urls(tweets)
end