【问题标题】:To match a perticular string in cinch bot匹配 cinch bot 中的特定字符串
【发布时间】:2014-02-22 22:00:28
【问题描述】:

我正在尝试匹配 Cinch 机器人框架中的特定字符串。

所以我当前的代码工作正常,但只有当字符串带有一些额外的单词时才会失败。例如

说我试图只匹配“hello-1234”,那么它会正确响应,但如果我输入“common hello-1234”或“hello-1234 closing”,那么代码就会失败。

谁能指导我如何摆脱这个。

代码:

require 'cinch'
require 'uri'
require 'nokogiri'
require 'net/https'

class Jira
  include Cinch::Plugin

  listen_to :message


  def listen(m)

    rx = config.jira.regex
    if md = m.message.match(rx)
    url = "#{config.jira.url}#{m.message.upcase}"
      response = httpget url
      details = Nokogiri::HTML response

config.jira.regex = /\b(ora)-(\d{0,7})\b/i

使用此正则表达式匹配 ora-1234567。假设我在上述情况下有“开始 ora-1234”或 ora-1234 结束”,它应该如何忽略开始和结束并仅匹配“ora-1234”

【问题讨论】:

  • 查看一些相关代码会很有帮助,包括异常堆栈跟踪或意外输出。
  • 听起来就像你希望它匹配它是整个字符串还是字符串中的子字符串,它听起来就像失败是因为您当前的正则表达式正在使用锚字符,例如^string$ 但如果您想要的不仅仅是随机猜测,您需要发布代码
  • @alliteralmind - 更新线程。
  • 我看到了一些代码,但我没有看到 正在 匹配的内容(“ora-1234”),也没有看到实际尝试执行的代码 i> 匹配(使用config.jira.regex)...
  • 但要清楚,那些\b 的东西是单词边界,所以如果字符串位于内容的开头或结尾或被非单词字符包围,它将匹配。但它不会匹配例如(使用带有硬编码“ora”的原始正则表达式)“fooora-1234bar”。 \b 是一个单词边界断言,它查找从非单词 char 到单词 char 的变化,反之亦然。

标签: ruby regex cinch


【解决方案1】:

要从消息中提取目标,请使用以下正则表达式:

/ora-\d{0,7}/i

我看起来你正在使用 ruby​​,所以这里是从更长的字符串中获取目标的代码:

code = m.message.match(/ora-\d{0,7}/i)[0]

【讨论】:

  • 我该如何克服这个问题?说开始 ora-1234,所以它应该忽略开始并且只匹配 ora-1234 或 ora-1234 关闭,在这种情况下它应该匹配 ora-1234 并忽略关闭。
  • 我不明白你的意思。使用正则表达式,描述问题的最佳方式是给出应该匹配的输入示例,以及一些应该匹配的输入示例。选择您的示例,以便它们展示边缘情况。更新您的问题以包含这些内容,然后在此处给我留言,让我知道您已经完成了。
  • 很抱歉没有说清楚或者你。更新了原来的问题,你能看看,让我知道它是否有意义。
  • 您是否要从邮件中提取 ora-nnnn
  • 查看编辑后的答案。如果您使用的是 ruby​​,请将该标签添加到您的问题中
【解决方案2】:

要将消息的一部分作为变量获取,只需执行以下操作:

listen: /(ora-\d{0,7})/i

def listen(m, jiraid)
  url = "#{config.jira.url}#{jiraid}"
  response = httpget url
  details = Nokogiri::HTML response

任何正则表达式组 [() 中的位] 都作为额外参数传递给任何相关的插件方法。

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多