est ici un grand long regex pour une URL:
(?i)\b((?:(?:[a-z][\w-]+:)?(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
La version élargie de ce (pour aider à rendre compréhensible):
(?xi)
\b
( # Capture 1: entire matched URL
(?:
(?:[a-z][\w-]+:)? # URL protocol and colon
(?:
/{1,3} # 1-3 slashes
| # or
[a-z0-9%] # Single letter or digit or '%'
# (Trying not to match e.g. "URI::Escape")
)
| # or
www\d{0,3}[.] # "www.", "www1.", "www2." … "www999."
| # or
[a-z0-9.\-]+[.][a-z]{2,4}/ # looks like domain name followed by a slash
)
(?: # One or more:
[^\s()<>]+ # Run of non-space, non-()<>
| # or
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
)+
(?: # End with:
\(([^\s()<>]+|(\([^\s()<>]+\)))*\) # balanced parens, up to 2 levels
| # or
[^\s`!()\[\]{};:'".,<>?«»“”‘’] # not a space or one of these punct chars
)
)
Ces deux viennent de this page, mais légèrement modifié pour rendre le protocole correctement facultatif - vous devriez lire cette page pour vous aider à comprendre ce qu'il fait, et il a aussi une variante qui ne correspond qu'aux URL basées sur le Web, que vous pouvez aussi regarder.
Merci pour toutes vos réponses. J'ai bien travaillé. – NLV
Tous vos Regex acceptent @@ ## $$ comme URL valide. Des idées? – NLV
NLV, vous n'avez pas spécifié que vous vouliez que nous corrigions votre regex, vous venez de demander comment le changer pour accepter n'importe quel protocole. En tout cas, voir ma nouvelle réponse ci-dessous qui donne une regex de validation d'URL complète (et complexe). –