powershell - 从数字列表构建表达式
问题描述
我有一个数字(交换机端口)的变量列表,我需要将其构建到一个字符串中,该字符串指示哪些端口应该“包含”,哪些应该“排除”。以下是所需格式的示例:
(Port 1[!(0-2 | 4-9)] | Port 4[!(0-3 | 5)])*
在此示例中,如果我的号码是 1-19 和 40-45,则将包括端口 1、端口 3 和端口 44,而将排除端口 10-12、14-19、40-43 和 45。
我事先不知道端口列表中会出现什么数字。我该如何构建这个表达式?
解决方案
如果我将其正确理解为正则表达式... 1-9 和 20-39 是其他情况。所以包括 1-9,13,20-39,44。
1..9 + 13 + 20..39 + 44 | % tostring 'port 0' |
select-string 'port [1-9]$|port 1[^0-2,4-9]|port [2-3][0-9]|port 4[^0-3,5]'
port 1
port 2
port 3
...
10..12 + 14..19 + 40..43 + 45 | % tostring 'port 0' |
select-string 'port [1-9]$|port 1[^0-2,4-9]|port [2-3][0-9]|port 4[^0-3,5]'
# no output
或者只是检查一个字符串是否在一个集合中:
$include = 1..9 + 13 + 20..39 + 44 | % tostring 'port 0'
1..45 | % tostring 'port 0' | where { $_ -in $include }
port 1
port 2
port 3
...
推荐阅读
- vue.js - 如何从获取的嵌套数组中删除括号
- python - 如何在不丢失日期的情况下合并两个数据
- embedded - Adaptive Autosar Manifest 文件,Manifest.json 和 Manifest.arxml 有什么?JSON 文件是由 arxml 创建的吗
- angularjs - AngularJS禁用输入类型按钮如果其他字段未完成
- ios - 解析服务器和 HTTP/2 连接到 APNS
- windows - 如何使用 powershell 脚本配置 Windows 802.1x 身份验证
- c# - 基于枚举搜索在列表中返回一个以上的值
- node.js - 为 aws ubuntu 服务器 node.js 安装设置 bash 脚本失败,但在再次启动时工作
- mongodb - 展开,但在每个结果行中保留原始数组
- elasticsearch - Elasticsearch 自定义日期时间格式,包括。序数