我目前遇到了PowerShell正则表达式的问题,因为我无法获得所需的Servername,实例名称和端口输出(如果可用)。不可否认,因为我是正则表达式的新手,所以我有很多需要了解。
这是我的设置和我迄今为止的调查结果
Data:
ZP000042
QRMLD1001\TEST
oFJA
UUQE0294\FAR,8594
基本上我需要提取以下内容:
Match 1[QRMLD1001\TEST] - Servername: QRMLD1001 ; Instancename: TEST
Match 2[UUQE0294\FAR,8594] - Servername: UUQE0294 ; Instancename: FAR ; Port: 8594
到目前为止,我只能通过此正则表达式提取Match 2[ UUQE0294\FAR,859
]
(\w+)\\(\w+)\,(\d+)
结果:
Groups : {0, 1, 2, 3}
Success : True
Name : 0
Captures : {0}
Index : 0
Length : 16
Value : UUQE0294\FAR,859
Success : True
Name : 1
Captures : {1}
Index : 0
Length : 8
Value : UUQE0294
Success : True
Name : 2
Captures : {2}
Index : 9
Length : 3
Value : FAR
Success : True
Name : 3
Captures : {3}
Index : 13
Length : 3
Value : 859
我真的只想拥有3到4个组,这意味着无论是否指定了端口,我都希望剖析服务器和实例名称,如果包含端口,那么端口也是如此
答案 0 :(得分:1)
你可以放一个允许在,
和最后一个数字之后出现0的量词,就像这样
(\w+)\\(\w+)\,?(\d*)
答案 1 :(得分:1)
我简单的方法是使模式的后一部分可选。
(\w+)\\(\w+)(,(\d+))?
这样就可以匹配这两个
UUQE0294\FAR,8594
UUQE0294\FAR
你可以通过一些外观来使这一点更加强大,但这里没有太大的收获。请注意,您的匹配组需要进行调整,因为还有一个匹配组。通过使用命名匹配
,您可以使该部分更容易一些(?<server>\w+)\\(?<instance>\w+)(,(?<port>\d+))?
所以现在你可以这样做,而不必担心组索引。
$matches.server
$matches.instance
$matches.port
如果端口不匹配,则$matches.port
将为空。