對不起,我想不出一個更好的標題,因爲這個問題比那個小盒子裏的問題複雜得多。叫我白癡,但我想不出一個簡單的方法來總結這一點。如何讓Ruby Regex以我需要的方式匹配所有內容?
我正在研究bot的插件,這是一個天氣插件,我希望它對用戶非常直觀和易於使用(與大多數程序員一樣)。這是我的正則表達式和代碼片段
match /forecast (\d+)?(.+)/i, method: :checkForecast
def checkForecast(m, time=0, location)
return if check_ignore(m.user)
formattedLocation = location.gsub! /\s/, '+'
coordinates = geoLookup(formattedLocation)
return m.reply "No results found for #{location}." if coordinates.nil?
address = findAddress(formattedLocation)
timeframe = time.to_i
data = fetchForecast(m, coordinates, address, timeframe, true)
return m.reply 'Uh oh, there was a problem fetching the specified forecast. Please try again later. :(' if data.nil?
m.reply(data)
alert = checkAlert(formattedLocation, address, true)
return m.user.notice "You have no alerts." if alert.nil?
m.user.notice(alert)
end
所以,現在下面就像我需要它匹配正則表達式:
「預計15朱諾,阿拉斯加」這將在查找Juno,阿拉斯加後返回陣列的第15個點,並返回所需結果
「預報」阿拉斯加州朱諾「這將默認爲陣列中的0點,並返回阿拉斯加州朱諾的最近預報
現在,如果我鍵入這些,它要麼不匹配所有,或認爲它的位置的一部分:
「預測99801」拋出一個異常說,[]是一個未定義的方法。
「預測10 99801」有了這個,它認爲我要求阿拉斯加朱諾#10,因爲它包括在最後一組。
「預測12 1201阿拉斯加州朱諾第一大街」認爲它再次成爲第二組的一部分。
基本上,我需要構造正則表達式,因此它能處理所有我想要的事情。
真的很難用文字解釋我想要的東西。我希望最終用戶能夠輸入任何邏輯觸發器並獲得良好的響應。本質上,我希望正則表達式能夠直觀地與最終用戶一起工作。我希望有人能夠輸入'forecast 99801',並且將數組中的腳本默認設置爲0,然後輸出天氣結果。如果有人要鍵入'forecast 12 99801',就像 – 2014-12-06 03:02:08
......但這個「99801」的值是什麼,這是一個始終由5個整數組成的郵政編碼?這些是你需要解釋和指定以編寫工作正則表達式的種類。 – smathy 2014-12-06 03:11:16
是的,這將是一個總是有5個整數的郵政編碼。 – 2014-12-06 03:25:26