给定以下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。




