lua中正規表示式的坑

2021-08-20 04:40:26 字數 1096 閱讀 2218

我在使用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)

但是我發現,這個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了。

JS中正規表示式

js中正規表示式有幾種不同的使用方法,一些用法是通過字串物件來使用,另外一些通過正規表示式物件使用。一 regexp 正規表示式 的屬性和方法 1 屬性 regexp的例項有幾個唯讀的屬性 global表示是否為全域性匹配,igorecase表示是否忽略大小寫,multiline表示是否為多行匹配,...

PHP中正規表示式

正規表示式一般表示式的形式如下 love 其中位於 定界符之間的部分就是將要在目標物件中進行匹配的模式。為了能夠使使用者更加靈活的的定製模式內容,正規表示式提供了專門的 元字元 所謂元字元就是指那些表示式中具有特殊意義的字元,可以用來規定其前導字元 即在元字元前面的字元 在目標物件中的出現模式。較為...

python中正規表示式

python中正規表示式語法與linux中的相容 檢視正規表示式 python提供re模組,包含所有正規表示式的功能。由於python的字串本身也用 轉義,所以要特別注意 s abc 001 python的字串 對應的正規表示式字串變成 abc 001 建議使用python的r字首,就不用考慮轉義的...