[英]TCL split text string to multiple variables (eggdrop)
我正在使用mysql选择和插入脚本,但是在将一行提取到两个变量中遇到问题。
该行作为变量$ 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的理解滞后。
使用变量的名称,而不是变量值本身:
regexp -- {(\S+)=(\S+)} $arg null arg1 arg2
如果您使用$var1
,它将在调用命令之前被该变量的值替换,这时该命令对使用了哪个变量一无所知。
您也可以使用split
作为替代:
% set results [split $arg "="]
这将为您提供包含要查找的两个部分的列表。
然后,您可以使用lindex
来引用每个元素。
% puts [lindex $results 0]
text field 1
% puts [lindex $results 1]
text field 2
或者,如果要将它们存储在变量arg1
和arg2
,则可以使用lassign
:
% lassign $results arg1 arg2
% puts $arg1
text field 1
% puts $arg2
text field 2
解析这些事情时,应注意仅完全符合您的期望。 (您需要记住,每当使用Tcl分配变量时,都需要提供变量名称 arg1
,而不是变量内容 $arg1
。)
regexp -- {([^\s=])=(\S+)} $arg null arg1 arg2
您还应该检查该regexp
调用的结果,以查看RE是否匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.