Regex 将字符串与TCL中的矩形括号匹配
我正在尝试使用“regexp”进行一些字符串检查。代码1工作,但如果$ref来自文件,则失败。代码如下: 代码1可以正常工作:Regex 将字符串与TCL中的矩形括号匹配,regex,tcl,Regex,Tcl,我正在尝试使用“regexp”进行一些字符串检查。代码1工作,但如果$ref来自文件,则失败。代码如下: 代码1可以正常工作: set foo "input \[1:0\]" regexp {input \[} $foo 代码2,$ref来自文件: ##ref_文件包含以下字符串: 输入[ 代码: 我无法控制ref_文件。如何使此代码工作?谢谢。看起来您没有使用regexp matching提供的任何东西,并且只执行普通字符串比较…所以为什么不使用类似的东西呢 string
set foo "input \[1:0\]"
regexp {input \[} $foo
代码2,$ref来自文件:
##ref_文件包含以下字符串:
输入[
代码:
我无法控制ref_文件。如何使此代码工作?谢谢。看起来您没有使用regexp matching提供的任何东西,并且只执行普通字符串比较…所以为什么不使用类似的东西呢
string first
返回匹配的索引,索引-1
表示找不到匹配项。如果如下所示,您可以轻松地在中使用此选项:
if {[string first $ref $foo] > -1} {
...
}
如果您仍然打算使用regexp,那么我想您可以使用helper proc来转义非单词字符:
proc regesc {text} {
regsub -all {\W} $text {\\&}
}
set foo "input \[1:0\]"
set fi [open ref_file r]
gets $fi ref
regexp [regesc $ref] $foo
if {[string first $ref $foo] > -1} {
...
}
proc regesc {text} {
regsub -all {\W} $text {\\&}
}
set foo "input \[1:0\]"
set fi [open ref_file r]
gets $fi ref
regexp [regesc $ref] $foo