Regex 如何使用PowerShell匹配字符串中的精确数字?
我编写了一个脚本来获取单个端口上的端口信息。脚本将“netstat-anob”导入一个变量,然后使用Where对象扫描该对象以获得确切的端口号,并返回所需的信息 不幸的是,我使用的唯一得到肯定结果的条件参数是-match。但它也会产生误报Regex 如何使用PowerShell匹配字符串中的精确数字?,regex,powershell,Regex,Powershell,我编写了一个脚本来获取单个端口上的端口信息。脚本将“netstat-anob”导入一个变量,然后使用Where对象扫描该对象以获得确切的端口号,并返回所需的信息 不幸的是,我使用的唯一得到肯定结果的条件参数是-match。但它也会产生误报 $netstatport = $netstat | Where-Object { $_ -match $port } 例如,如果我正在搜索的端口是555,则会找到该信息。但是如果$port等于55,也会发现相同的信息。换句话说,我需要的是: $port=55
$netstatport = $netstat | Where-Object { $_ -match $port }
例如,如果我正在搜索的端口是555,则会找到该信息。但是如果$port等于55,也会发现相同的信息。换句话说,我需要的是:
$port=55>>错误
$port=555>>正确
$port=5555>>错误
我尝试过各种条件,比如-eq、-ieq、=,等等。仅匹配有效,但它太不精确
我缺少什么?由-match
操作符支持
$port = 55
$regex= ":$port\s"
$netstat = Where-Object { $_ -match $regex}
分解正则表达式:
-表示netstat输出中的端口分隔符的字符:
-包含指定端口号的变量$port
-端口号后的单个空格\s
请注意,此模式将返回与本地和外部IP地址/端口号匹配的值。您可以使用
\b
在字边界处进行匹配:
$netstatport = $netstat | Where-Object { $_ -match "\b$port\b"}
这样,如果只传递
55
,5555
,您就不会匹配555
,您应该小心地获取参数/用户输入,并直接在正则表达式中使用它,因为任何特殊字符都会被解释,并且您无法预测将出现哪些字符
因此,您应该使用[RegEx]::escape()对其进行转义
$escPort=[RegEx]::转义($port)
$netstat |其中对象{$\匹配“\b$esport\b”}
(这使用了\b
,但如果你想使用更具体的答案,这是相同的原则)你试过在哪里对象{$\u匹配“\b”+$port+“\b”}
或在哪里对象{$\u匹配“\b$port\b”}
,很好。谢谢,斯特里比雪夫。太好了,我把它作为答案发布了(我希望是正确的:)。“\b$port\b”
足够了,PowerShell将自动扩展$port
变量,只要您使用:)