RFC 3986 definiert das Format von URIs, eingeschlossen den Unterformaten URL und URN. Das RFC-Dokument liefert selbst keinen Regulären Ausdruck im PCRE-Stil aus, allerdings eine zweiseitige Defintion in der Augmented Backus-Naur Form. Mithilfe dieser kann man selbst einen regulären Ausdruck erstellen.

Heraus kam dieser reguläre Ausdruck, der auch die Spezifikationen von IPv6 und IPvFuture in RFC 3986 mit einschließt. Die IRI-Spezifikationen für internationalisierte URIs aus RFC 3987 mit Zeichen außerhalb von US-ASCII werden hingegen nicht berücksichtigt und sollen später in einem anderen Regulären Ausdruck veröffentlicht werden.

/^[a-zA-Z][a-zA-Z0-9\+\-\.]*:(\/\/(([a-zA-Z0-9\-\.\_\~\!$\&\'\(\)\*\+\,\;\=]|(%[a-fA-F0-9][a-fA-F0-9])|\:)*\@)?(\[((([a-fA-F0-9]{1,4}\:){6}([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|\:\:([a-fA-F0-9]{1,4}\:){5}([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|([a-fA-F0-9]{1,4}\:)?\:\:([a-fA-F0-9]{1,4}\:){4}([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-fA-F0-9]{1,4}\:)?[a-fA-F0-9]{1,4})?\:\:([a-fA-F0-9]{1,4}\:){3}([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-fA-F0-9]{1,4}\:){0,2}[a-fA-F0-9]{1,4})?\:\:([a-fA-F0-9]{1,4}\:){2}([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-fA-F0-9]{1,4}\:){0,3}[a-fA-F0-9]{1,4})?\:\:([a-fA-F0-9]{1,4}\:)([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-fA-F0-9]{1,4}\:){0,4}[a-fA-F0-9]{1,4})?\:\:([a-fA-F0-9]{1,4}\:[a-fA-F0-9]{1,4}|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5]))|(([a-fA-F0-9]{1,4}\:){0,5}[a-fA-F0-9]{1,4})?\:\:[a-fA-F0-9]{1,4}|(([a-fA-F0-9]{1,4}\:){0,6}[a-fA-F0-9]{1,4})?\:\:)|v[a-fA-F0-9]\.[a-zA-Z0-9\-\.\_\~\!$\&\'\(\)\*\+\,\;\=\:]+)\]|([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|[1][0-9]{2}|2[0-4][0-9]|25[0-5])|([a-zA-Z0-9\-\.\_\~\!$\&\'\(\)\*\+\,\;\=]|(%[a-fA-F0-9][a-fA-F0-9]))*)(\:[0-9]*)?(\/([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)*)*|\/(([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)+(\/([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)*)*)?|([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)+(\/([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)*)*|)(\?(([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)|\/|\?)*)?(\#(([\!$\&\'\(\)\*\+\,\;\=a-zA-Z0-9\-\.\_\~]|(%[a-fA-F0-9][a-fA-F0-9])|\:|\@)|\/|\?)*)?$/

Irgendwelche Fehler bitte einfach in den Kommentaren melden.

I do not maintain a comments section. If you have any questions or comments regarding my posts, please do not hesitate to send me an e-mail to blog@stefan-koch.name.