使用现有数据从 ipconfig 中提取数据的正则表达式
Regex to extract data from ipconfig using existing data
我有以下提取键值对的正则表达式,效果很好。我已经通过另一个系统从许多机器上接收到这些数据,我宁愿使用我已经拥有的数据,也不愿使用 WMI 再次获取数据。
(^.*?)[^\w]+\:\s(.*?$|\n\r)$
问题 - 1 - 我还希望能够使用单独的正则表达式提取适配器名称。你能帮忙吗
问题 - 2 - 我的正则表达式不提取值列表。例如DNS 后缀搜索列表或 DNS 服务器列表。
我的源数据如下。感谢任何帮助
Windows IP Configuration
Host Name . . . . . . . . . . . . : abcmyhost
Primary Dns Suffix . . . . . . . : parker.industries
Node Type . . . . . . . . . . . . : Hybrid-GLS
IP Routing Enabled. . . . . . . . : YES
WINS Proxy Enabled. . . . . . . . : YES
DNS Suffix Search List. . . . . . : parker1.industries
parker2.industries
parker3.industries
parker4.industries
parker5.industries
parker6.industries
parker7.industries
parker8.industries
parker9.industries
parker10.industries
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . : parker.industries
Description . . . . . . . . . . . : Ready 2
Physical Address. . . . . . . . . : 60-11-11-31-09-XY
DHCP Enabled. . . . . . . . . . . : NO
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : AB80::11FG:1KI:LK9F:12N2%19(Preferred)
IPv4 Address. . . . . . . . . . . : 111.222.333.444(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Monday, November 11, 2019 6:23:03 AM
Lease Expires . . . . . . . . . . : Wednesday, November 13, 2019 6:51:30 AM
Default Gateway . . . . . . . . . : 111.11.131.1
DHCP Server . . . . . . . . . . . : 111.22.144.199
DHCPv6 IAID . . . . . . . . . . . : 87244642462
DHCPv6 Client DUID. . . . . . . . : 00-01-02-03-04-05-06-07-08-09-10-11-E9-G7
DNS Servers . . . . . . . . . . . : 111.22.111.254
111.22.112.254
111.33.113.254
111.33.114.254
NetBIOS over Tcpip. . . . . . . . : Enabled
有点复杂,但你可以简化它,
(?i)^\s{3,}(DNS[^.:]*)[^:\r\n]*:\s*(?:(?:[a-z0-9]*\.[a-z0-9]*[\r\n]\s{10,})+[a-z0-9]*\.[a-z0-9]*)|(?:(?:(?:\d+\.){3}\d+)\s*)+(?:(?:\d+\.){3}\d+)|^\s{3,}(?:[^.:]*)[^:\r\n]*:\s*(.*)$|^([^:]+):$|^(.*)$
我不确定其他示例的外观。
写这种表情的关键是交替。我们会首先选择最复杂的模式,然后继续选择简单的模式(类似于 FizzBuzz)。
在这里,我们最复杂的图案是多线图案。收集之后,剩下更简单的线条。
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。
正则表达式电路
jex.im 可视化正则表达式:
问题 #1 的答案:
/adapter (.*):/
只要使用不同类型的适配器(以太网、无线等)就可以了。
您还可以获得添加另一个类型的类型 (.*)
(.*) adapter (.*):/
如果您可以使用 \G
锚点来获得重复匹配以获得例如 DNS Suffix Search List
的列表,您可以使用:
(?:(^[^:\r\n]+):?[\r\n]+|\G(?!^))\r?\n[^:\r\n]+ : ([^\r\n]+(?:\r?\n(?!.* : )[ \t]+[^\r\n]+)*)
部分
(?:
非捕获组
(
捕获 组 1
^[^:\r\n]+
从 string 开始匹配除 :
或换行符以外的任何字符 1+ 次
)
关闭组 1
:?[\r\n]+
匹配可选 :
并匹配 1+ 换行符
|
或
\G(?!^)
在上一场比赛结束时声明位置,而不是在开始时
)
关闭非捕获组
\r?\n[^:\r\n]+
匹配换行符,然后匹配除 :
或换行符 之外的任何字符 1+ 次
:
匹配 space、:
和 space
(
捕获 第 2 组
[^\r\n]+
匹配除换行符以外的任何字符 1 次以上
(?:
非捕获组
\r?\n
匹配一个换行符
(?!.* : )
断言下一行不包含 :
[ \t]+[^\r\n]+
匹配 1+ space 或制表符和 1+ 次任何字符,换行符除外
)*
关闭群重复0+次
)
关闭组 2
我有以下提取键值对的正则表达式,效果很好。我已经通过另一个系统从许多机器上接收到这些数据,我宁愿使用我已经拥有的数据,也不愿使用 WMI 再次获取数据。
(^.*?)[^\w]+\:\s(.*?$|\n\r)$
问题 - 1 - 我还希望能够使用单独的正则表达式提取适配器名称。你能帮忙吗
问题 - 2 - 我的正则表达式不提取值列表。例如DNS 后缀搜索列表或 DNS 服务器列表。
我的源数据如下。感谢任何帮助
Windows IP Configuration
Host Name . . . . . . . . . . . . : abcmyhost
Primary Dns Suffix . . . . . . . : parker.industries
Node Type . . . . . . . . . . . . : Hybrid-GLS
IP Routing Enabled. . . . . . . . : YES
WINS Proxy Enabled. . . . . . . . : YES
DNS Suffix Search List. . . . . . : parker1.industries
parker2.industries
parker3.industries
parker4.industries
parker5.industries
parker6.industries
parker7.industries
parker8.industries
parker9.industries
parker10.industries
Ethernet adapter Ethernet 5:
Connection-specific DNS Suffix . : parker.industries
Description . . . . . . . . . . . : Ready 2
Physical Address. . . . . . . . . : 60-11-11-31-09-XY
DHCP Enabled. . . . . . . . . . . : NO
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : AB80::11FG:1KI:LK9F:12N2%19(Preferred)
IPv4 Address. . . . . . . . . . . : 111.222.333.444(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Monday, November 11, 2019 6:23:03 AM
Lease Expires . . . . . . . . . . : Wednesday, November 13, 2019 6:51:30 AM
Default Gateway . . . . . . . . . : 111.11.131.1
DHCP Server . . . . . . . . . . . : 111.22.144.199
DHCPv6 IAID . . . . . . . . . . . : 87244642462
DHCPv6 Client DUID. . . . . . . . : 00-01-02-03-04-05-06-07-08-09-10-11-E9-G7
DNS Servers . . . . . . . . . . . : 111.22.111.254
111.22.112.254
111.33.113.254
111.33.114.254
NetBIOS over Tcpip. . . . . . . . : Enabled
有点复杂,但你可以简化它,
(?i)^\s{3,}(DNS[^.:]*)[^:\r\n]*:\s*(?:(?:[a-z0-9]*\.[a-z0-9]*[\r\n]\s{10,})+[a-z0-9]*\.[a-z0-9]*)|(?:(?:(?:\d+\.){3}\d+)\s*)+(?:(?:\d+\.){3}\d+)|^\s{3,}(?:[^.:]*)[^:\r\n]*:\s*(.*)$|^([^:]+):$|^(.*)$
我不确定其他示例的外观。
写这种表情的关键是交替。我们会首先选择最复杂的模式,然后继续选择简单的模式(类似于 FizzBuzz)。
在这里,我们最复杂的图案是多线图案。收集之后,剩下更简单的线条。
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。
正则表达式电路
jex.im 可视化正则表达式:
问题 #1 的答案:
/adapter (.*):/
只要使用不同类型的适配器(以太网、无线等)就可以了。
您还可以获得添加另一个类型的类型 (.*)
(.*) adapter (.*):/
如果您可以使用 \G
锚点来获得重复匹配以获得例如 DNS Suffix Search List
的列表,您可以使用:
(?:(^[^:\r\n]+):?[\r\n]+|\G(?!^))\r?\n[^:\r\n]+ : ([^\r\n]+(?:\r?\n(?!.* : )[ \t]+[^\r\n]+)*)
部分
(?:
非捕获组(
捕获 组 1^[^:\r\n]+
从 string 开始匹配除 )
关闭组 1:?[\r\n]+
匹配可选:
并匹配 1+ 换行符|
或\G(?!^)
在上一场比赛结束时声明位置,而不是在开始时
:
或换行符以外的任何字符 1+ 次)
关闭非捕获组\r?\n[^:\r\n]+
匹配换行符,然后匹配除:
或换行符 之外的任何字符 1+ 次
:
匹配 space、:
和 space(
捕获 第 2 组[^\r\n]+
匹配除换行符以外的任何字符 1 次以上(?:
非捕获组\r?\n
匹配一个换行符(?!.* : )
断言下一行不包含:
[ \t]+[^\r\n]+
匹配 1+ space 或制表符和 1+ 次任何字符,换行符除外
)*
关闭群重复0+次
)
关闭组 2