我有一组如下所示的行:
tb-set-node-recipe $vpn1 W2K3_SP2_VPN_SRV
tb-set-node-os $vpn2 I_W2K3_SP2_VPN_SRV
tb-set-node-os $xpcli1 I_XP_SP3_VPN_CLI
tb-set-node-os $xpcli2 I_XP_SP2_VPN_CLI
tb-set-node-os $xpcli3 I_XP_SP1_VPN_CLI
tb-set-node-recipe $ftp1 FC8_KS_FTP_SRV
tb-set-node-os $smb1 XP_SP3-STD
tb-set-node-recipe $web1 FC8_KS_WEB_SRV
Run Code Online (Sandbox Code Playgroud)
我在Java语言中使用以下正则表达式来解析tb-set-node-os
语句:
(tb\-set\-node\-os)\s+[\$\w]+\s+\w+
Run Code Online (Sandbox Code Playgroud)
除了包含的倒数第二行之外,它工作正常 $smb1
有谁知道为什么会这样?我似乎无法想出这个.提前致谢!
\w
与hyphen(-
)不匹配,所以你需要调整它:
(tb\-set\-node\-os)\s+[\$\w]+\s+[\w-]+
Run Code Online (Sandbox Code Playgroud)
请注意,-
如果它在字符类中是第一个或最后一个,则不需要转义(但可以),但如果它位于类的中间,则必须对其进行转义.
同样值得一无所知,当您拥有连续的互斥项时,您可以使用所有格量词来提高性能:
(tb\-set\-node\-os)\s++[\$\w]++\s++\w++
Run Code Online (Sandbox Code Playgroud)
由于\s
永远不能匹配\w
(反之亦然),所以可以使用占有量词(*+
和++
)而不是通常的贪婪量词,这将避免/防止任何潜在的回溯.
可能这是因为短划线 - 不是单词字符(与\ w不匹配),所以这样的东西可能有效:
(tb\-set\-node\-os)\s+[\$\w]+\s+[\w\-]+
Run Code Online (Sandbox Code Playgroud)