【问题标题】:Regex Errors In VBSVBS 中的正则表达式错误
【发布时间】:2014-02-11 14:45:11
【问题描述】:

我不断收到错误:正则表达式中的语法错误。我已经使我的正则表达式模式变得更简单,更容易尝试解决我对导致问题的猜测。我现在卡住了。

这是模式:(?<=\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,这是我最近的模式,但我明白量词不能用于后视:(?&lt;=\.\d+\s\x22).*?(?=\x22)

编辑:所以问题在于 VB 不支持的lookbehind。任何人都可以提出一个匹配预期目标且仅匹配预期目标的模式吗?

【问题讨论】:

标签: regex vbscript


【解决方案1】:

VBScript 基于 ECMAScript,而 ECMAScript 的正则表达式实现根本不支持后向断言。

因此不能使用(?&lt;=\d\s\x22)。使用

"(?:\d\s\x22)(.*?)(?=\x22)"

并检查第 1 组的内容以了解比赛的相关部分。

【讨论】:

  • 我实际上曾经有过类似的情况,但是 VBS 将其作为第一场比赛返回:0 "UPS-VLAN 1005。换句话说,它从非捕获组中捕获字符。所以这些都出来了。
  • 正如我所写,您需要检查第一个 group (objMatch.SubMatches(0)) 的内容。
  • 我不知道 SubMatches。谢谢。
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多