Corretamente Correspondendo um URL de IDN

Preciso de ajuda para criar uma expressão regular que possa corresponder adequadamente a uma URL dentro do texto livre.

esquemaUm dos seguintes:ftp, http, https (éftps um protocolo?)opcionaldo utilizador (e opcionalpassar)hospedeiro (com suporte para IDNs)suporte parawww esubdomínio (s) (com suporte para IDNs)filtragem básica de TLDs ([a-zA-Z]{2,6} é o suficiente eu acho)opcionalporta númerocaminho (opcional, com suporte para caracteres Unicode)inquerir (opcional, com suporte para caracteres Unicode)fragmento (opcional, com suporte para caracteres Unicode)

Aqui está o que eu consegui descobrir sobre subdomínios:

Um "subdomínio" expressa dependência relativa, não dependência absoluta: por exemplo, wikipedia.org compreende um subdomínio do domínio org e en.wikipedia.org compreende um subdomínio do domínio wikipedia.org. Em teoria, essa subdivisão pode ir até 127 níveis de profundidade e cada rótulo DNS pode conter até 63 caracteres, desde que o nome de domínio inteiro não exceda um comprimento total de 255 caracteres.

Quanto ao nome de domínio em si eu não consegui encontrar nenhuma fonte confiável, mas acho que a expressão regularpara não-IDNs (Eu não sei como escrever uma versão compatível com IDNs) é algo como:

[0-9a-zA-Z][0-9a-zA-Z\-]{2,62}

Alguém pode me ajudar com essa expressão regular ou me indicar uma boa direção?

questionAnswers(3)

yourAnswerToTheQuestion