Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用PowerShell匹配字符串中的精确数字?_Regex_Powershell - Fatal编程技术网

Regex 如何使用PowerShell匹配字符串中的精确数字?

Regex 如何使用PowerShell匹配字符串中的精确数字?,regex,powershell,Regex,Powershell,我编写了一个脚本来获取单个端口上的端口信息。脚本将“netstat-anob”导入一个变量,然后使用Where对象扫描该对象以获得确切的端口号,并返回所需的信息 不幸的是,我使用的唯一得到肯定结果的条件参数是-match。但它也会产生误报 $netstatport = $netstat | Where-Object { $_ -match $port } 例如,如果我正在搜索的端口是555,则会找到该信息。但是如果$port等于55,也会发现相同的信息。换句话说,我需要的是: $port=55

我编写了一个脚本来获取单个端口上的端口信息。脚本将“netstat-anob”导入一个变量,然后使用Where对象扫描该对象以获得确切的端口号,并返回所需的信息

不幸的是,我使用的唯一得到肯定结果的条件参数是-match。但它也会产生误报

$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
变量,只要您使用:)