我一直在試圖開發一個程序,將在MMORPG中使用DMing,但我在解析實際正則表達式時遇到了麻煩。正則表達式識別XdY + Z或XdY
從另一個線程引用自己在一個不太活躍的論壇:
我已經正式接管了DiceRoller插件從多年以前,我已經重新設計了很多,因爲我已經把它做爲並在遊戲中進行了大量測試。雖然我還沒有上傳任何東西,但我一直在努力尋找目前對插件設計至關重要的正則表達式。
一些背景:DiceRoller插件的最新迭代使得它可以在raid聊天中輸入「!XdY」(其中X是骰子的數量,Y是骰子值),並且擁有該插件的DM將會通過插件中的一些邏輯(隨機數lua協議),然後在添加骰子後吐出一個輸入。
其計算方法如下:
local count, size = string.match(message, "^!(%d+)[dD](%d+)$")
現在我需要做的是分析兩個「XDY!」或「XDY + Z」,但它好像我不能接近的功能到「XdY + Z」,無論我使用哪個正則表達式,因爲我需要它來執行這兩個表達式。如有必要,我可以提供更多的源代碼上下文。
這是我所得到的最接近:
http://i.imgur.com/eMhPHQB.png
,這是與正則表達式:
local count, size, modifier = string.match(message, "^!(%d+)[dD](%d+)+?(%d+)$")
正如你所看到的,與修改都可以正常運行精細。但是,刪除修飾符正則表達式仍然認爲它是「XdY + Z」,所以用「1d20」它認爲它是「1d2 + 0」。它會認爲1d200是「1d20 + 0」等。我試着圍繞可選字符「?」移動但它只是導致表達式根本無法工作。如果我這樣做!1d2它不起作用。這幾乎就像可選角色NEEDS在那裏?
感謝您提前的幫助,我一直在努力與正則表達式。
這也允許'!1d2 +'通過,雖然在這種情況下這可能不是問題。 –
@PaulKulchenko - ''^!(%d +)[dD](%d +)%+?(%d *)%f [%D] $「'會拒絕以'+'結尾的字符串。 –
這工作;最終成爲第二個問題,如果修改器從未從第三個捕獲組獲得值,那麼它只會使程序崩潰。但它最終會變成「」,所以我只是把它固定下來! 謝謝! – Hranu