【发布时间】: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 的变化,反之亦然。