2012-06-19 22 views
3

我知道你不能在Lua重複比賽組。例如,如果我想匹配兩個連續"45"的,我不能這樣做:可能匹配(看似)無效的Lua模式

print(string.find("some 4545 text", "(%d%d)+")) 

,它將打印nil(沒有找到匹配)。

然而,由於find(...)不報告錯誤(無效的模式"%""(%d"錯誤生產),它使我相信模式"(%d%d)+"一個有效的。

如果"(%d%d)+"是一個有效的模式,它匹配的是什麼?如果不是,是否有特殊的原因不會產生錯誤?

回答

5

「(%d%d)+」有效模式。它與例如「一些45 + 67文本」或「一些4567+文本」匹配,並在第一種情況下捕獲「45」,在第二種情況下捕獲「67」。

+0

啊哈,'+'只是成爲一個文字而不是元字符(這與我習慣的正則表達式/模式匹配引擎非常不同)。謝謝! –

+0

我知道的其他正則表達式有這種模糊性:括號用於分組(有+有意義)和捕獲。在lua模式中,沒有分組,因此...但是,手冊可以更明確地陳述一下。 –

1

要匹配兩個連續出現的數字串,請使用"(%d+)%1"

+0

謝謝,雖然我已經知道了。我的問題是''(%d%d)+「'應該匹配的模式(以防它有效)。 –