2

我正在研究一个 mysql 选择和插入脚本,但我在将单行提取到两个变量时遇到问题。

该行作为变量 $arg 传递,由以下内容组成:“文本字段 1=文本字段 2”我尝试使用“=”作为分隔符通过正则表达式将 $arg 拆分为 $arg1 和 $arg2 但我总是整行被解析为 $arg2 并且 $arg1 为空。

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

我尝试了几种使用正则表达式并更改分隔符的方法,但结果保持不变。它是用 tcl v8.5 完成的。

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

4

3 回答 3

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
于 2013-12-30T13:58:28.970 回答
1

在解析这些类型的东西时,你应该注意只匹配你所期望的(你需要记住,每当你用 Tcl 给一个变量赋值时,你需要给出变量的名字arg1——而不是变量的内容—— $arg1。)

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

您还应该检查该regexp调用的结果,以查看 RE 是否匹配。

于 2013-12-30T15:10:13.420 回答
1

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

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

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

于 2013-12-30T13:43:55.933 回答