MIRC/MSL从通配符中拔出Certian Strings



所以我对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。

相关内容

  • 没有找到相关文章

最新更新