所以我对mSl脚本很陌生,但之前我还做过其他一些脚本。我想弄清楚如何做一些模式匹配,但我遇到了问题。假设我有以下文字
有人向吉姆翻了一个硬币而且是头。
我想知道这枚硬币最终是不是正面或反面。我认为它会像
on *:text:*flipped a coin * and it was *:#:{echo -a the coin was $3}
但似乎$运算符从完整的通配符中获取第3个字。我可以通过这个例子弄清楚如何正确使用它,但是我们可以说我们有以下多个硬币的例子
有人向Dave翻了一枚硬币,它是尾巴,还装了一个 给吉姆的钱,它是头。
我想知道Jim有什么硬币,但我不知道他之前或之后有多少人,所以在我的外卡中找到第x个单词是行不通的。我想做的是这样的事情(主要是sudo代码)
on *:text:$1 * to Jim and it was $2:#:{
echo -a $1 is who flipped it to Jim and it was $2
}
我基本上可以丢弃我的通配符,现在我可以直接引用硬币鳍状肢是谁,结果是什么。
感谢您的帮助!
编辑:
我能找到用正则表达式查找硬币结果,但我不知道如何将结果输出到mirc中。请参阅正在使用here的正则表达式模式。我尝试在mirc和$ regml中使用$ regex,但它无法正常工作。我目前在我的脚本中有以下内容:
on $*:text:/Jim and it was (\b\w{5}\b)/iS:#:{
echo -a $regex(currCoin, $1-,Jim and it was (\b\w{5}\b))
echo -a $regml(currCoin,0)
echo -a $regml(currCoin,1)
}
我认为$ regex基本上会将我的正则表达式中的组保存到currCoin,然后$ regml将显示第N组值,有点像$ N将显示正则表达式中的第N组值。我显然很想念一些东西。
答案 0 :(得分:1)
您可以使用令牌标识符而不是正则表达式。我还没有使用msl至少10年,所以请耐心等待。
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,.)
}
您可以稍微缩短它或在同一行上执行更多操作,但这至少是可读的。