[英]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.