首页 > 解决方案 > 正则表达式从具有多项选择的主机获取端口

问题描述

我需要从 url 获取端口,我使用以下方法

https://regex101.com/r/yoBODY/1

(?:([^@]*)@)?(.\[.+\]|([^:]+))(?:[:](\d+))?

由于我对正则表达式很陌生,我错过了什么吗?

这是输入,我需要从中获取端口

test:222
https://aaa.com:333

https://www.aaa.com:333
aaa.bbb.cccc:8000

我得到一些带有端口的 URI/URL

如果可以,请告诉我

标签: regex

解决方案


对于用作独立字符串的字符串,您可以使用

^(?:https?:\/\/)?(?:([^@]*)@)?(\[[^][]+\]|([^:]+))(?::(\d+))?$

如果将这些字符串匹配为多行文本中的行,建议将\n和添加\r到否定字符类以避免在下一行溢出:

^(?:https?:\/\/)?(?:([^@\r\n]*)@)?(\[[^][\r\n]+\]|([^:\r\n]+))(?::(\d+))?$

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • (?:https?:\/\/)?- 一个可选的http://https://
  • (?:([^@]*)@)?- 任何零个或多个字符的可选序列,而不是@(捕获到第 1 组),然后是一个@字符
  • (\[[^][]+\]|([^:]+))- 第 2 组:[[and之外的一个或多个字符],然后]或除:捕获到第 3 组之外的一个或多个字符
  • (?::(\d+))?- 一个可选序列:和一个或多个数字被捕获到第 4 组
  • $- 字符串结束。

推荐阅读