所以我对MSL脚本很新,但是我之前做过其他脚本。我试图弄清楚如何进行一些模式匹配,但是我有问题。假设我有以下文字
有人把硬币翻到吉姆,那是头。
我想找出硬币最终是头还是尾巴。我认为那会像
on *:text:*flipped a coin * and it was *:#:{echo -a the coin was $3}
,但似乎$运营商正在从完整的通配符中获取第三个字。我也许可以弄清楚如何通过此示例正确获取它,但是可以说我们有以下示例,其中有多个硬币
有人将硬币翻到Dave,它是尾巴,还填满了 吉姆的硬币是头。
我想找出吉姆的硬币,但是我不知道他之前或之后有多少人,所以在我的通配符中找到xth单词不起作用。我想做的是这样的事情(主要是sudo代码)
on *:text:$1 * to Jim and it was $2:#:{
echo -a $1 is who flipped it to Jim and it was $2
}
我基本上可以扔掉我的通配符,现在我可以直接引用硬币flaiper是谁,结果是什么。
感谢您的帮助!
编辑:
我能够找到带有正则表达的硬币结果,但是我不确定如何将结果拉出MIRC。请参阅我在此处使用的正则图案。我尝试在MIRC和$ regml中使用$ REGEX,但它无法正常工作。我目前在脚本中有以下内容:
on $*:text:/Jim and it was (bw{5}b)/iS:#:{
echo -a $regex(currCoin, $1-,Jim and it was (bw{5}b))
echo -a $regml(currCoin,0)
echo -a $regml(currCoin,1)
}
我认为$ REGEX本质上可以将这些组从我的正则curdcoin保存到Currcoin,然后$ regml会显示第n组值,例如$ n会在REGEX中显示第n组值。我显然很想念一些东西。
您可以使用令牌标识符,而不是为此发行正句。我至少已经10年没有使用MSL,所以请忍受。
on *:text:*to Jim and it was*:#:{
var %jimpos = $findtok($1-,Jim,1,32)
var %coinpos = %jimpos + 4
var %result = $gettok($1-,%coinpos,32)
msg $chan $remove(%result,.)
}
您可能会在同一条行上进行一些缩短或在同一行上进行更多操作,但这至少可以阅读。
on *:action:$(*has flipped a coin to $6 and it was $10 $+ *):#: {
var %coin.1,%coin.2, %user.1, %user.2
%user.1 = $6
if (head isin $10) { %coin.1 = heads }
if (tail isin $10 { %coin.1 = tails }
if (*and also filled a coin to ?* and it was ?????. iswm $1-) {
%user.2 = $17
if (head* iswm $21) { %coin.2 = heads }
else { %coin.2 = tails }
}
echo $nick says he/she flipped a coin to %user.1 $iif(%user.2,and %user.2)
}
只需确保您始终在每个句子中使用相同数量的单词。因此,如果您说"已经翻了硬币……"您需要始终用单词"翻转……"
来言语。您可能会注意到我在上使用了:action::#:而不是:text::#:#:这是检测/描述#chan text。也称为/me或/action。