我在使用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字首,就不用考慮轉義的...