TCL将文本字符串拆分为多个变量(eggdrop)

时间:2013-12-30 13:34:34

标签: regex variables tcl eggdrop

我正在研究一个mysql select和insert脚本,但是我遇到了将一行提取为两个变量的问题。

该行作为变量$ arg传递,由以下组成:“text field 1 = text field 2” 我试图通过regexp将$ arg拆分为使用“=”作为分隔符进入$ arg1和$ arg2,但我总是将整行解析为$ arg2且$ arg1为空。

regexp -- {(\S+)=(\S+)} $arg null $arg1 $arg2

我尝试了几种使用regexp和更改分隔符的方法但结果仍然相同。 它是用tcl v8.5完成的。

我对tcl不是很熟悉所以我怀疑这主要是由于对tcl / tk的理解滞后。

3 个答案:

答案 0 :(得分:1)

使用变量的名称,而不是变量值本身:

regexp -- {(\S+)=(\S+)} $arg null arg1 arg2

如果你使用$var1,它将在调用命令之前被该变量的值替换,此时命令不知道已经使用了什么变量。

答案 1 :(得分:1)

您也可以使用split替代:

% set results [split $arg "="]

它为您提供了一个包含您正在寻找的两个部分的列表。

然后您可以使用lindex来引用每个元素。

% puts [lindex $results 0]
text field 1
% puts [lindex $results 1]
text field 2

或者如果您想将它们存储在变量arg1arg2中,您可以使用lassign

% lassign $results arg1 arg2
% puts $arg1
text field 1
% puts $arg2
text field 2

答案 2 :(得分:1)

在解析这些事情时,您应该注意只匹配完全您期望的内容。 (您需要记住,无论何时使用Tcl分配变量,都需要提供变量的名称 - arg1 - 而不是内容变量的分析 - $arg1。)

regexp -- {([^\s=])=(\S+)} $arg null arg1 arg2

您还应该检查regexp来电的结果,看看RE是否匹配。