给定以下SSH网址:

git@github.com:james/example 
git@github.com:007/example 
git@github.com:22/james/example 
git@github.com:22/007/example 

我该如何拉以下物品:
{user}@{host}:{optional port}{path (user/repo)} 

在示例中可以看到,用户名之一是数字而不是端口。我不知道如何解决。 URL中也不总是包含端口。

我当前的正则表达式是:
^(?P<user>[^@]+)@(?P<host>[^:\s]+)?:(?:(?P<port>\d{1,5})\/)?(?P<path>[^\\].*)$ 

不知道还有什么尝试。

请您参考如下方法:

懒惰的量词可以解救!

这似乎工作良好,并且满足可选端口:

^ 
(?P<user>.*?)@ 
(?P<host>.*?): 
(?:(?P<port>.*?)/)? 
(?P<path>.*?/.*?) 
$ 

换行符不是正则表达式的一部分,因为启用了 /x修饰符。如果不使用 /x,请删除所有换行符。

https://regex101.com/r/wdE30O/5

谢谢 @Jan的 optimizations。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!