正则表达式可选地匹配url中的端口号

时间:2014-11-27 05:46:31

标签: regex powershell

我有一个像http:\/\/(?<Servername>[^"]+):(?<Port>[^"]+)这样的正则表达式从网址中选择服务器和端口。当端口存在于url中时,这可以正常工作,但是当端口号不存在时,它也与服务器不匹配。 例如,

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

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

2 个答案:

答案 0 :(得分:1)

您可以将正则表达式修改为

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

示例:http://regex101.com/r/sN8iT4/1

所做的更改

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

  • 相匹配
  • (:(?<Port>.+))?匹配:后跟的所有内容。此部分与Portnumber

    匹配
    • ?量词,量化零或一个出现的Portnumber

答案 1 :(得分:0)

(?<=\/\/)([^:]+):?(.*)

试试这个。抓住捕获。参见演示。

http://regex101.com/r/oE6jJ1/44