我有一个需要在TCL中匹配的长正则表达式模式
p:nth-child(3n) {
background: #ff0000;
}
p:nth-child(3n+1) {
background: #ff0000;
}
p:nth-child(3n+2) {
background: #ff0000;
}
如何将其拆分为多行,使用\进行拆分不起作用,因为正则表达式失败。
谢谢, 阿涅尔。
答案 0 :(得分:3)
那是一个怪物RE。分解它的最简单方法是使用扩展模式RE,将(?x)
置于其开头,这使得RE中的空白毫无意义(然后你还必须使用\s
来匹配实际空白)
在这种情况下,将RE放在自己的变量中也很有用。它更清楚。
set RE {(?x)
# We can use comments in extended mode too! This is useful for sanity's sake…
.*
# Detect and match for 'intf'
%MKA-5-SESSION_START:\s+\((.*)\s+:.*\)\s+
# Detect and match for 'mac'
MKA\sSession\sstarted\sfor.*([0-9A-Fa-f]{4}.[0-9A-Fa-f]{4}.[0-9A-Fa-f]{4}).*
# Detect and match for 'auditsessid'
AuditSessionID\s+(.*),\s+
# Detect and match for 'authmgrhdl'
AuthMgr-Handle\s+(.*)
}
然后你就像正常一样用regexp
匹配它,现在我们已经将RE本身分开了,这一点更清楚了:
regexp $RE $op -> intf mac auditsessid authmgrhdl
通常最好检查regexp
的结果,看看是否匹配。