【问题标题】:mIRC/mSL pulling certian strings out of a wildcardmIRC/mSL 从通配符中提取某些字符串
【发布时间】:2018-03-03 09:12:09
【问题描述】:

所以我对 mSl 脚本很陌生,但我之前做过一些其他的脚本。我试图弄清楚如何进行一些模式匹配,但我遇到了问题。假设我有以下文字

有人向吉姆投了一枚硬币,结果是正面。

我想知道硬币最终是正面还是反面。我以为会是这样的

on *:text:*flipped a coin * and it was *:#:{echo -a the coin was $3}

但似乎 $ 运算符正在从完整的通配符中获取第三个单词。我也许可以通过这个例子弄清楚如何正确处理它,但是假设我们有以下带有多个硬币的例子

有人给戴夫投了一枚硬币,结果是反面,还填了一个 硬币给吉姆,是正面。

我想知道 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
}

我基本上可以扔掉我的通配符,现在我可以直接参考抛硬币的人是谁,结果是什么。

感谢您的帮助!

编辑:

我可以使用正则表达式找到 find the coin 结果,但我不确定如何在 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 会在 regex 中显示第 N 个组值。不过,我显然很想念一些东西。

【问题讨论】:

  • 如果你的文本总是会改变,那么你的搜索就不可能匹配。如果您有静态文本,则需要使用正则表达式。
  • 我似乎能够检测到我想要的字符串并将其保存到正则表达式中的一个组中,http://regexr.com/3gqgi 但我无法像我想使用 $regex 那样将字符串拉出和 $regml。当我尝试从我的正则表达式输出中查看第 0 组或第 1 组时,只说“1”意味着它找到了 1 个结果。不知道我做错了什么,但我知道这是什么。谢谢!

标签: scripting mirc


【解决方案1】:

您可以为此使用令牌标识符而不是正则表达式。我至少有 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,.)
}

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

【讨论】:

  • 这是很久以前的,但仍然很有帮助。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多