Regex 正则表达式可以选择匹配url中的端口号

Regex 正则表达式可以选择匹配url中的端口号,regex,powershell,Regex,Powershell,我有一个类似于http:\/\/(?[^”]+):(?[^”]+)的正则表达式来从url中选择服务器和端口。当url中存在端口时,这可以正常工作,但当端口号不存在时,它也与服务器不匹配。 比如说, Url -> http://Server1:20 Values Returned ServerName = Server1 Port = 20 Url -> http://Server2 Values Returned ServerName = blank Port = blan

我有一个类似于
http:\/\/(?[^”]+):(?[^”]+)
的正则表达式来从url中选择服务器和端口。当url中存在端口时,这可以正常工作,但当端口号不存在时,它也与服务器不匹配。 比如说,

Url -> http://Server1:20 
Values Returned ServerName = Server1 Port = 20
Url ->    http://Server2 
Values Returned ServerName = blank Port = blank

对于第二种情况,我希望得到值ServerName=Server2 Port=blank

,您可以根据需要修改正则表达式

^http:\/\/(?<Servername>[^:]+)(:(?<Port>.+))?$
^http:\/\/(?[^::]+)(:(?。+)$
例如:

所做的更改

  • [^::::+
    匹配除
    以外的任何内容。此部分与
    Servername

  • (:(?。+)?
    匹配后跟
    的任何内容。此部件与
    端口号匹配

    • 限定符,限定Portnumber的零次或一次出现

(?我试过了,但在url中同时存在服务器和端口的情况下不起作用。@Nadeem您使用的是哪种语言?我使用的是powershell@Nadeem它在regex101中工作,您的字符串与提供的输入相同吗?这是很好的工作regex+1。它应该在任何regex工具中工作。
(?<=\/\/)([^:]+):?(.*)