首页 > 解决方案 > TCL——正则表达式匹配不正确

问题描述

set cell "HEADBUFTIE42D_D3_N"
set postfix "_M7P5TR_C60L08"
set line "  cell(HEADBUFTIE42D_D3_N_M7P5TR_C60L08) { "
if {[regexp "^ +cell[(]$cell$postfix[)] *\\{" $line match]} {
    puts "hello"
}

在这里我试图匹配这条线

  cell(HEADBUFTIE42D_D3_N_M7P5TR_C60L08) { 

请注意,开头有 2 个空格,之后有 1 个空格{

但比赛并没有发生。请帮忙

标签: regexsyntaxtcl

解决方案


您遇到的问题是没有正确转义正则表达式元字符({没有被转义,然后[(]正在尝试执行名为 的命令(,等等)。如果你format像这样使用它会更容易:

set cell "HEADBUFTIE42D_D3_N"
set postfix "_M7P5TR_C60L08"
set line "  cell(HEADBUFTIE42D_D3_N_M7P5TR_C60L08) { "
set re [format {^ +cell\(%s%s\) *\{} $cell $postfix]
if {[regexp $re $line match]} {
    puts "hello"
}

推荐阅读