给定URL(单行):http :
//test.example.com/dir/subdir/file.html
如何使用正则表达式提取以下部分:
即使我输入以下URL,该正则表达式也应能正常工作:
http://example.example.com/example/example/example.html
单个正则表达式可解析和分解包括查询参数和锚点的完整URL,例如
https://www.google.com/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
RexEx职位:
网址:RegExp ['$&'],
协议:RegExp。$ 2,
主持人:RegExp。$ 3,
路径:RegExp。$ 4,
文件:RegExp。$ 6,
查询:RegExp。$ 7,
hash:RegExp。$ 8
然后,你可以轻松地进一步解析主机(以“。”定界)。
什么我会做的是使用这样的:
/*
^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$
*/
proto $1
host $2
port $3
the-rest $4
进一步分析“其余”尽可能具体。在一个正则表达式中这样做有点疯狂。
从2010年10月20日起,链接代码nippets.joyent.com/posts/show/523不起作用
问题在于这部分:
(.*)?
由于Kleene星已接受0或更多,所以该?
部分(0或1)使它感到困惑。我通过更改(.*)?
为来解决了(.+)?
。您也可以删除?
嗨,Dve,我已经进行了一些改进,可以从URL中提取example.com,如下所示
http://www.example.com:8080/....
:^((http[s]?|ftp):\/\/)?\/?([^\/\.]+\.)*?([^\/\.]+\.[^:\/\s\.]{2,3}(\.[^:\/\s\.]{2,3})?(:\d+)?)($|\/)([^#?\s]+)?(.*?)?(#[\w\-]+)?$
并证明没有正则表达式是完美的,这是一个立即更正的内容:
^((http[s]?|ftp):\/\/)?\/?([^\/\.]+\.)*?([^\/\.]+\.[^:\/\s\.]{2,3}(\.[^:\/\s\.]{2,3})?)(:\d+)?($|\/)([^#?\s]+)?(.*?)?(#[\w\-]+)?$
我修改了此正则表达式以识别URL的所有部分(改进版本) -Python中的
^((?P<scheme>[^:/?#]+):(?=//))?(//)?(((?P<login>[^:]+)(?::(?P<password>[^@]+)?)?@)?(?P<host>[^@/?#:]*)(?::(?P<port>\d+)?)?)?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?
code
代码