多行的正则表达式

时间:2016-03-04 08:59:23

标签: regex tcl

我有一个需要在TCL中匹配的长正则表达式模式

p:nth-child(3n) {
    background: #ff0000;
} 
p:nth-child(3n+1) {
    background: #ff0000;
} 
p:nth-child(3n+2) {
    background: #ff0000;
} 

如何将其拆分为多行,使用\进行拆分不起作用,因为正则表达式失败。

谢谢, 阿涅尔。

1 个答案:

答案 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的结果,看看是否匹配。