我正在研究一个mysql选择和插入脚本,但是在将一行提取为两个变量时遇到问题。
该行作为变量$arg传递,由以下部分组成:"文本字段 1=文本字段 2"我尝试使用"="作为分隔符通过正则表达式将$arg拆分为 $arg 1 和 $arg 2,但我总是将整行解析为 $arg 2 和 $arg 1 为空。
regexp -- {(S+)=(S+)} $arg null $arg1 $arg2
我已经尝试了几种使用正则表达式的方法并更改分隔符,但结果保持不变。它正在通过 tcl v8.5 完成。
我对tcl不是很熟悉,所以我怀疑这主要是由于对tcl/tk的理解滞后。
您也可以使用 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
使用变量的名称,而不是变量值本身:
regexp -- {(S+)=(S+)} $arg null arg1 arg2
如果使用$var1
则在调用命令之前,它将替换为该变量的值,此时该命令不知道使用了哪个变量。
在解析这些东西时,你应该注意只与你期望的完全匹配。(您需要记住,每当使用 Tcl 赋值变量时,都需要提供变量的名称 — arg1
— 而不是变量的内容 — $arg1
。
regexp -- {([^s=])=(S+)} $arg null arg1 arg2
您还应该检查该regexp
调用的结果,以查看 RE 是否匹配。