我有一组如下所示的行:
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
我在Java语言中使用以下正则表达式来解析tb-set-node-os
语句:
(tb\-set\-node\-os)\s+[\$\w]+\s+\w+
除了包含$smb1
有没有人知道为什么会这样?我似乎无法想出这个。提前谢谢!
答案 0 :(得分:8)
\w
与连字符(-
)不匹配,因此您需要对其进行调整:
(tb\-set\-node\-os)\s+[\$\w]+\s+[\w-]+
请注意,-
不需要转义(但可以),如果它是字符类中的第一个或最后一个,但如果它位于类的中间,则必须进行转义。 / p>
同样值得一提的是,当您拥有顺序互斥的项目时,您可以使用所有格量词来提高性能:
(tb\-set\-node\-os)\s++[\$\w]++\s++\w++
由于\s
永远不会匹配\w
(反之亦然),所以可以使用占有量词(*+
和++
)代替通常的贪婪词,将避免/防止任何潜在的回溯。
答案 1 :(得分:6)
可能这是因为短划线 - 不是单词字符(与\ w不匹配),所以这样的东西可能会起作用:
(tb\-set\-node\-os)\s+[\$\w]+\s+[\w\-]+
答案 2 :(得分:1)
我看到的唯一问题是$ smb1行在最后一列中有一个连字符,似乎与\ w不匹配。你可以尝试。+在表达的最后。