发出匹配的确切词

时间:2019-05-13 14:32:31

标签: regex

我正在构建可以与网址匹配的网站验证器正则表达式。

事实是,它有90%可行!问题出在我的字符串匹配中。

我的正则表达式:(http(s?):// www。| www。| http(s?)://)+ [a-z0-9] +([-。] {1} [a-z0-9] +)。[az] {2,5}(:[0-9] {1,5})?(/。)?

我要测试的字符串:

1)(应该会失败,但是会通过) https://www.xy

2)(应该通过,确实如此)https://www.xy.com

它一直进入我的组(http(s?)://),而不是组((http(s?):// www。)

关于如何解决此问题的任何想法?

我要传递的

URL:

http://www.test.com

http://test.com

https://test.com

https://www.test.com

我要失败的网址: http://www.bla https://www.ggg

因此,如果它与https://www相匹配。或http://www。应该使用正确的组,然后将其余的正则表达式应用到检查是否包含.. test.com等的地方。

This is using correct Group This is using the wrong Group

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?:https?:\/\/)?(?!www\.[^.]+$)(?:www\.)?[a-z0-9]+(?:[-.][a-z0-9]+)*\.[a-z]{2,5}(?::[0-9]{1,5})?(\/.*)?$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?:https?:\/\/)?-可选的http://https://
  • (?!www\.[^.]+$)-如果在当前位置的右边立即有www.,然后是字符串末尾除点以外的任何1+个字符,则负匹配将使匹配失败
  • (?:www\.)?-可选的www.
  • [a-z0-9]+-1个以上的小写字母和数字
  • (?:[-.][a-z0-9]+)*-重复-.零次或更多次,然后再输入1+小写字母和数字
  • \.-一个.
  • [a-z]{2,5}-两到五个小写字母
  • (?::[0-9]{1,5})?-:和1到5位数字的可选序列
  • (\/.*)?-/和行的其余部分的可选序列
  • $-字符串的结尾。