1. 程式人生 > >lua中正則表示式的坑

lua中正則表示式的坑

我在使用OpenResty編寫lua程式碼時,需要使用到lua的正則表示式,其中pattern是這樣的,

--熱水器設定時間
local s = '12:33'
local pattern = "(20|21|22|23|[01][0-9]):([0-5][0-9])"
local matched = string.match(s, "(20|21|22|23|[01][0-9]):([0-5][0-9])")
print(matched)

因為我的業務需求是,表示24進位制的時間:23:09

但是我發現,這個pattern始終不能得到我想要的匹配結果。這個普通的pattern在其它的程式語言,比如C、C++,python,perl,PHP等中,都不會有啥問題的,為啥就行不通呢?

後來我查詢了網上的資料,並逐個嘗試不同的pattern,發現只要出現"|"就不行!

下面是我驗證程式碼

#!/usr/bin/lua
--注意:lua正則表示式中沒有|這個元字元

local s = '12:04'
print(string.match(s, "[01][0-9]:[0-5][0-9]"))
print(string.match(s, "[01]%d:[0-5]%d"))
print(string.match(s, "[0-1]%d:[0-5]%d"))
print(string.match(s, "(2[0-3]|[01][0-9]):[0-5][0-9]"))

local s = '23:59'
print(string.match(s, "2[0-3]:[0-5][0-9]"))
print(string.match(s, "2[0-3]:[0-5]%d"))

下面是輸出結果的截圖


為此,我找到lua正則表示式中的坑,它與其它語言都不同:

在正則表示式中沒有"|"元字元

如果要表示多種可能並列的情況,只能寫多個pattern了。