我不断收到错误:正则表达式中的语法错误。我已经使我的正则表达式模式变得越来越简单,可以尝试解决我对导致问题的原因的猜测。我现在被困住了。
这是模式:(?<=\d\s\x22)(.*?)(?=\x22)
这是干草堆:
Dhcp Server \\192.168.7.111 add scope 10.10.1.0 255.255.255.0 "UPS-VLAN 1005" "Monitor APC UPS in data closets"`
Dhcp Server \\192.168.7.111 Scope 10.10.1.0 Add reservedip 10.10.1.22 00a0a0aa0000 "SITE-SEA-100-1A00-APC" "APC Room 1C00" "DHCP"
Dhcp Server \\192.168.7.111 Scope 10.10.1.0 Add reservedip 10.10.1.123 00a0a0aa0000 "SITE-SEA-100-13B48-APC" "" ""
Dhcp Server \\192.168.7.111 Scope 10.10.1.0 Add reservedip 10.10.1.122 00a0a0aa0000 "SITE-SEA-100-12B27-APC" "" ""
Dhcp Server \\192.168.7.111 Scope 10.10.1.0 Add reservedip 10.10.1.103 00a0a0aa0000 "SITE-SEA-100-2C24-APC" "" ""
这是预期的匹配:UPS-VLAN 1005
这是有问题的代码:
strLine = unparsed_scopename_file.ReadLine
Set objRE = New RegExp
With objRE
.Pattern = "(?<=\d\s\x22)(.*?)(?=\x22)"
.Global = False
End With
Set objMatch = objRE.Execute(strLine)
我在最后一行收到错误。
FWIW,这是我最近的模式,但我知道量词不能在后视中使用:(?<=\.\d+\s\x22).*?(?=\x22)
编辑:所以问题是lookbehind,VB不支持lookbehind。任何人都可以建议一种与预期目标匹配且仅与预期目标匹配的模式吗?
最佳答案
VBScript 基于 ECMAScript,而 ECMAScript 的正则表达式实现根本不支持后向断言。
因此(?<=\d\s\x22)
不能使用。使用
"(?:\d\s\x22)(.*?)(?=\x22)"
并检查第 1 组的内容以了解比赛的相关部分。
关于VBS 中的正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704999/