mIRC / mSL从通配符中提取certian字符串

时间:2017-09-21 21:53:37

标签: scripting mirc

所以我对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组值。我显然很想念一些东西。

1 个答案:

答案 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,.)
}

您可以稍微缩短它或在同一行上执行更多操作,但这至少是可读的。