以下是我希望使用Tcl $line
将$ram
与regexp
匹配的代码。
set line { 0 DI /hdamrf};
set ram {/hdamrf};
regexp {\s+\d\s+DI\s+$ram} $line match; ## --> 0
请帮我构建一个可以匹配正则表达式的搜索字符串。碰巧在搜索字符串中使用变量时,必须将它们括在花括号中。但花括号不允许我使用\s
来检测空白区域。感谢。
答案 0 :(得分:3)
这是一种可能性:
regexp [format {\s+\d\s+DI\s+%s} $ram] $line match
这是另一个:
regexp "\\s+\\d\\s+DI\\s+$ram" $line match
答案 1 :(得分:1)
以这种方式尝试:
regexp [subst -nocommands -nobackslashes {\s+\d\s+DI\s+$ram}] $line match
例如:
% regexp [subst -nocommands -nobackslashes {\s+\d\s+DI\s+$ram}] $line match
1
请参阅subst
here的手册页:
此命令对其字符串参数执行变量替换,命令替换和反斜杠替换,并返回完全替换的结果。以与Tcl命令完全相同的方式执行替换。结果,字符串参数实际上被替换了两次,一次是Tcl解析器,一次是Tcl命令,一次是
subst
命令。如果指定了
-nobackslashes
,-nocommands
或-novariables
中的任何一个,则不会执行相应的替换。例如,如果指定了-nocommands
,则不执行命令替换:打开和关闭括号被视为普通字符,没有特殊解释。
因为它已经在{...}
中,所以关于解析器解释它的部分两次并不完全准确:)