Scripting mIRC/mSL从通配符中提取证书字符串

Scripting mIRC/mSL从通配符中提取证书字符串,scripting,mirc,Scripting,Mirc,所以我对mSl脚本非常陌生,但我以前也做过一些其他的脚本。我正试图找出如何进行模式匹配,但我遇到了一个问题。假设我有以下文本 有人向吉姆扔了一枚硬币,结果是他的头 我想知道硬币到底是正面还是反面。我以为会是这样 on *:text:*flipped a coin * and it was *:#:{echo -a the coin was $3} 但是,$操作符似乎从完整的通配符中提取了第三个单词。我也许可以通过这个例子来找出正确的方法,但假设我们有以下几个例子,其中有多枚硬币 有人向戴夫扔了

所以我对mSl脚本非常陌生,但我以前也做过一些其他的脚本。我正试图找出如何进行模式匹配,但我遇到了一个问题。假设我有以下文本

有人向吉姆扔了一枚硬币,结果是他的头

我想知道硬币到底是正面还是反面。我以为会是这样

on *:text:*flipped a coin * and it was *:#:{echo -a the coin was $3}
但是,$操作符似乎从完整的通配符中提取了第三个单词。我也许可以通过这个例子来找出正确的方法,但假设我们有以下几个例子,其中有多枚硬币

有人向戴夫扔了一枚硬币,硬币是反面的,还装满了一个硬币 给吉姆的硬币是人头

我想知道吉姆有什么硬币,但我不知道有多少人在他之前或之后,所以在我的通配符中找到第X个单词是行不通的。我想做的是这样的事情(主要是sudo代码)

我基本上可以扔掉我的通配符,现在我可以直接引用谁是掷硬币者,结果是什么

谢谢你的帮助

编辑:

我可以用regex找到findthecoin结果,但我不确定如何在mirc中得到结果。查看我使用的正则表达式模式。我试着在mirc中使用$regex和$regml,但效果不好。我目前的脚本中包含以下内容:

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基本上会将我的regex中的组保存到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,.)
}

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

如果您的文本总是要更改,则很难匹配您的搜索。如果你有一个静态文本,你需要使用regex。我似乎能够检测到我想要的字符串并将其保存到regex中的一个组中,但我不能像使用$regex和$regml那样拉出字符串。当我试图从我的正则表达式输出中查看第0组或第1组时,只会说“1”,这意味着它找到了1个结果。我不确定我做错了什么,但我知道这很重要。谢谢这是很久以前的事了,但仍然很有帮助。非常感谢!!
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,.)
}