2014-12-06 32 views
-1

對不起,我想不出一個更好的標題,因爲這個問題比那個小盒子裏的問題複雜得多。叫我白癡,但我想不出一個簡單的方法來總結這一點。如何讓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阿拉斯加州朱諾第一大街」認爲它再次成爲第二組的一部分。

基本上,我需要構造正則表達式,因此它能處理所有我想要的事情。

回答

1

不知道你期望在這裏:)所以讓我首先解釋爲什麼你的例子並不表現爲你想要啓動:

「預測99801」拋出一個異常說,[]是未定義方法。

你的第一組包括一個尾隨空格,因此不匹配,所以"99801".+匹配,因此作爲location參數傳送給checkForecast方法傳遞。

出於某種原因,你用gsub!它,如果它不匹配的回報nil,因爲有一個在"99801"然後formattedLocation沒有空格設置爲nil,我猜你geoLookup方法希望它成爲一些東西,[]能被呼籲。

「預測10 99801」有了這個,它認爲我要求阿拉斯加朱諾#10,因爲它包括在最後一組。

是第一組,這樣會在你的工作示例來處理一樣15,但"99801"都會有同樣的問題上面。

「預測12 1201阿拉斯加州朱諾第一市場」認爲它再次成爲第二組的一部分。

,第一組將是"12 "這將意味着timeframe12和字符串的其餘部分將是location,將成爲:"1201+First+st.+Juneau,+Alaska"formattedLocation


所以,也許可以幫助,只是爲了有一個演練。如果沒有,那麼你真的需要解釋你在這裏之後。

+0

真的很難用文字解釋我想要的東西。我希望最終用戶能夠輸入任何邏輯觸發器並獲得良好的響應。本質上,我希望正則表達式能夠直觀地與最終用戶一起工作。我希望有人能夠輸入'forecast 99801',並且將數組中的腳本默認設置爲0,然後輸出天氣結果。如果有人要鍵入'forecast 12 99801',就像 – 2014-12-06 03:02:08

+0

......但這個「99801」的值是什麼,這是一個始終由5個整數組成的郵政編碼?這些是你需要解釋和指定以編寫工作正則表達式的種類。 – smathy 2014-12-06 03:11:16

+0

是的,這將是一個總是有5個整數的郵政編碼。 – 2014-12-06 03:25:26

相關問題