我想使用正则表达式来验证git存储库url。我在stackoverflow上找到了一些答案,但没有一个通过我的测试。
调试在这里:http://regexr.com/39qia
如何让它通过最后四种情况?
git@git.host.hy:group-name/project-name.git
git@git.ho-st.hy:group-name/project-name.git
http://host.xy/agroup-name/project-name.git
http://ho-st.xy/agroup-name/project-name.git
答案 0 :(得分:1)
我无法确定,因为我不熟悉git链接语法,但下面的正则表达式还会匹配下面的4个值:
((git|ssh|http(s)?)|(git@[\w.-]+))(:(//)?)([\w.@\:/~-]+)(\.git)(/)?
^ ^^ ^
我已经指出了改变的部分;即:
-
之后向{0}}部分添加了@
,因为ho-st
没有通过。-
移至字符类的末尾,否则/-~
表示与 lot 匹配的字符范围/
到~
人物。有很多事情可以从上面简化,但由于我不知道你的确切目标,我离开正则表达式尽可能接近你所拥有的那个。
答案 1 :(得分:0)
你可以尝试这个:
(?'protocol'git@|https?:\/\/)(?'domain'[a-zA-Z0-9\.\-_]+)(\/|:)(?'group'[a-zA-Z0-9\-]+)\/(?'project'[a-zA-Z0-9\-]+)\.git
然后,您可以从匹配的组中提取所需的信息。
您可以在Regex101
上测试此正则表达式答案 2 :(得分:0)
好的,以下表达式匹配您当前的所有测试文本,并且与以前提供的任何误报都不匹配:
((((git|user)@[\w.-]+)|(git|ssh|http(s)?|file))(:(\/){0,3}))?([\w.@\:/~\-]+)(\.git)(\/)?
另见regex。
警告:请注意,目前的输入与'〜'相匹配和' - '出现在他们不应该的地方。