Write a function to preprocess textual data for a language model.
Implement preprocess_text(text, max_tokens) to lowercase text, extract words, numbers, and contractions, replace URLs with <URL>, and return at most max_tokens tokens. Return an empty list when max_tokens is zero or negative. For example, "We're ready!" produces ["we're", "ready"], and "See https://xometry.com/quote." produces ["see", "<URL>"].
def preprocess_text(text, max_tokens):