我要从列表中进行匹配搜索。我有目录名称示例:
bind pub "-|-" !tt tt
proc tt {nick host handle channel arg} {
set name [lindex [split $arg] 0]
set groups {aa BB Cc DD Ee Ff gg hh}
if {[lsearch -inline $groups $name] != -1} {
putnow "PRIVMSG $channel :match name $name"
}
}
,我想检查它是否在列表中(大写字母应忽略)。
Window {
visible: true
width: 640; height: 480
title: qsTr("SQL Example")
property var db
property int ident: 0
TextField {
id: field
placeholderText: qsTr("Enter Your Name")
hoverEnabled: true
}
Button {
text: "Next"
anchors.top: field.bottom
onClicked: storeData(field.displayText)
}
Component.onCompleted: initDatabase()
function initDatabase() {
db = LocalStorage.openDatabaseSync("data", "1.0", "Save names", 1000000)
db.transaction( function(tx)
{ tx.executeSql('CREATE TABLE IF NOT EXISTS data (id INTEGER, name TEXT, mode TEXT)') })
}
function storeData(username) {
db.transaction( function(tx) {
tx.executeSql('INSERT INTO data VALUES (?, ?, ?)', [ident, username, ""])
ident++ })
}
}
无论我写什么,它总是说匹配...
致谢
答案 0 :(得分:1)
如果我正确理解,您想知道列表groups
中的任何元素是否与目录名称示例匹配。如果是这样,那么您应该对string match
使用循环:
bind pub "-|-" !tt tt
proc tt {nick host handle channel arg} {
set name [lindex [split $arg] 0]
set groups {aa BB Cc DD Ee Ff gg hh}
foreach group $groups {
if {[string match -nocase *$group* $name]} {
putnow "PRIVMSG $channel :$name matched $group"
break
}
}
}
答案 1 :(得分:0)
您为lsearch指定了“ -inline”参数。它返回匹配或空字符串。因此,它始终不等于-1。尝试删除“ -inline”参数。另外,可能您想使用“ -exact”参数。
答案 2 :(得分:0)
如果您可以将事物列表全部排成一种情况(例如小写),则可以使用[string tolower]
和in
运算符进行搜索。这比lsearch
简单,因为它会产生干净的二进制结果:
proc tt {nick host handle channel arg} {
set name [lindex [split $arg] 0]
set groups {aa bb cc dd ee ff gg hh}
if {[string tolower $name] in $groups} {
putnow "PRIVMSG $channel :match name $name"
}
}
答案 3 :(得分:0)
您的问题尚不清楚,但您可能希望将一些线索汇总在一起
set channels {
blabla.aa
cc.oiwerwer
asfd.Dd.asoiwer
}
set groups {aa BB Cc DD Ee Ff gg hh}
foreach group $groups {
set idx [lsearch -nocase $channels "*$group*"]
if {$idx != -1} {
puts "$group -> [lindex $channels $idx]"
}
}
输出
aa -> blabla.aa
Cc -> cc.oiwerwer
DD -> asfd.Dd.asoiwer
或者,更简洁的是:
lsearch -inline -all -nocase -regexp $channels [join $groups |]
blabla.aa cc.oiwerwer asfd.Dd.asoiwer