相关规范可以在rfc 3986中找到,并包含所有可能的url组件的常规语法定义.但是,出于您的目的,这些可能过于笼统.一个有点浓缩的表达式只匹配http(s)协议下的URL
http[s]?://(([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))+|([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))(:[0-9]+)?(/([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))*)+(\?([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?(#([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?
这可以简化为
http[s]?://(([^/:\.[:space:]]+(\.[^/:\.[:space:]]+)*)|([0-9](\.[0-9]{3})))(:[0-9]+)?((/[^?#[:space:]]+)(\?[^#[:space:]]+)?(\#.+)?)?
以防您对url组件的正确语法有信心.
请注意,您可能希望有更多限制性模式,例如全文搜索,并且只允许使用iana注册的顶级域名.
希望能帮助到你,
最好的问候,carsten