lua中正則表示式的坑
阿新 • • 發佈:2019-01-05
我在使用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了。