天天看點

LuaJit轉義的問題

之前在項目中,處理類似!30轉為表現的字元串時,有人寫了這樣的一段代碼“\![1-2][0-9]”,當換成luajit時啟動報錯了,出錯原因在于轉義字元使用不對。在很多語言中,正則的轉義字元是“\”,但在lua中卻不是,至少标準的不是。

引号,使用“\”進行轉義,跟字元串定義類似

local s = “\"Hello World!\””

=> 輸出 “Hello World!”  - 帶雙引号

其它字元如特殊的字元(被稱為魔法字元):( ) . % + – * ? [ ] ^ $,想比對這些字元時需要加上%,比如想比對%則需要使用%%,%( 比對左括号 %) 比對右括号,如果%用于字母和數字的字元,意義就變了,比如%d、%a、%D、%U、%1。

“% + 大寫字母”是所有對應小寫字母的補集

. 所有字元

%a 字母

%c 控制字元

%d 數字

%l 小寫字母

%p 标點符号

%s 空白字元

%u 大寫字元

%w 字母和數字字元

%x 十六進制數字

%z 内部表示為0的字元

+ 重複1次或多次

* 重複0次或多次

- 也是重複0次或多次

? 出現0或1次

在lua中還是較為友善的處理嵌套的,因為它有%b - 比對對稱字元。

比如下面這個例子

local x = string.gsub(“xddddyxxxxxyxxxy”, “%bxy”, “a”)

print(x)

=>axxxxaxxa

不過要注意的是string.fromat中的格式跟C語言中的printf一樣,與上面表格列出的捕獲字元不同

LuaJit轉義的問題

繼續閱讀