uri的格式多种多样,经常需要校验uri或者分析uri提取各部分,下面提供一个自己写的正则表达式来提取uri,我用它来分析扫描器中输入的或者爬取到的uri,优先提取,由于水平有限,未能完全校验uri是否合法。
下面是简略分析:
?:
不捕获匹配文本,也不给它分配组和组号^(\w*):\/\/
:匹配protocol://,例如http://,ftp://(?: ([^:]*)?(?::(.*))? @)?
匹配用户名密码部分([0-9.\-A-Za-z]+)
:匹配hostname部分(?::(\d+))?
: 匹配端口(?:\/([^?#]*))?
匹配路径(?:\?([^#]*))?
匹配请求参数(?:#(.*))?$
匹配锚点优点是对于不同的uri,各部分所在的group下标不变。例如group(4)是hostname,那么不管uri包不包含username和password,group(4)始终是hostname。