Regex for git';的存储库

本文关键字:存储 for git Regex | 更新日期: 2023-09-27 18:28:19

我想使用regex来验证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

Regex for git';的存储库

我不能确定,因为我不熟悉git-link语法,但下面的regex将额外匹配接下来的4个值:

((git|ssh|http(s)?)|(git@['w.-]+))(:(//)?)(['w.@':/~-]+)('.git)(/)?
                             ^                     ^^    ^

我已经指出了更改的部分;即:

  1. -添加到@之后的零件中,因为ho-st没有以其他方式传递
  2. -移到字符类的末尾,因为否则/-~将意味着字符范围/~,它与字符相匹配
  3. 逃脱了最后一个点(感谢@MatiCiero)

有很多事情可以从上面简化,但由于我不知道你的确切目标,我将尽可能接近你的正则表达式。

你可以试试这个:

(?'protocol'git@|https?:'/'/)(?'domain'[a-zA-Z0-9'.'-_]+)('/|:)(?'group'[a-zA-Z0-9'-]+)'/(?'project'[a-zA-Z0-9'-]+)'.git

然后,您可以从匹配的组中提取所需的信息。

您可以在Regex101 上测试此正则表达式

好的,下面的表达式匹配您当前的所有测试文本,并且不匹配您之前提供的任何误报:

((((git|user)@['w.-]+)|(git|ssh|http(s)?|file))(:('/){0,3}))?(['w.@':/~'-]+)('.git)('/)?

另请参阅regex。

注意:请注意,当前输入与出现在不应该出现的地方的"~"answers"-"匹配。