lua中的魔法字符转义问题
? ? ? ???強烈推薦人工智能學習網站??
? ? ? ?lua中的魔法字符有( ) . % + - * ? [ ] ^ $ ,在表示它們時候要考慮用到轉義,轉義符號為%,但有些卻不需要轉義。下面我們通過實際代碼來測試一下。
? ? ? ?首先來認識一個函數,string.find()查找目標模板在給定字符串中出現的位置,找返回起始和結束位置,沒找到返回nil
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1(2","(")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: unfinished capture stack traceback:[C]: in function 'find'test.lua:1: in main chunk[C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1(2","%(")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#( 需要轉義
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1)2",")")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1)2","%)")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#?
) 不需要轉義也能被find到,當然轉義過了也沒有問題
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1.2",".")) root@16d2a5728582:~/mapan# lua test.lua 1 1 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1.2","%.")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#. 不需要轉義能被find到,而且不會報錯,但是返回的位置卻不對,有點奇怪。加上轉義字符%后,就成功返回了
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1%2","%")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: malformed pattern (ends with '%') stack traceback:[C]: in function 'find'test.lua:1: in main chunk[C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1%2","%%")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#% 不轉義會被報錯,加了轉義字符之后就返回了正確的結果
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1+2","+")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1+2","%+")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#+ 不轉義不會報錯,加上轉義字符之后也沒問題
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1-2","-")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1-2","%-")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#- ?不轉義不會報錯,加上轉義字符也沒有問題
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1*2","*")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1*2","%*")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#* 不轉義不會報錯,加上轉義字符也沒問題
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1?2","?")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1?2","%?")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#? 不轉義不會報錯,加上轉義字符也沒問題
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1[2","[")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: malformed pattern (missing ']') stack traceback:[C]: in function 'find'test.lua:1: in main chunk[C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1[2","%[")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#[ 不加轉義會報錯,加上轉義之后正常
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1]2","]")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1]2","%]")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#] 不加轉義不會報錯,加上轉義之后也正常
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1^2","^")) root@16d2a5728582:~/mapan# lua test.lua 1 0 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1^2","%^")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#^ 不加轉義前打印結果不正常,加上轉義之后打印結果正常
?
?
?
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1$2","$")) root@16d2a5728582:~/mapan# lua test.lua 4 3 root@16d2a5728582:~/mapan#$ 沒加打印字符返回的結果不正常,加了之后打印結果就正常了
?
?
? ?這一些魔法字符,有些不需要轉義,打印結果就正確;有些不轉義,打印結果錯誤,但是不會報錯;還有些直接報錯。感覺挺有意思的,但是也有點不解,當然實際開發中,字符還是都應該加上轉義。string.format()函數也會有類似的問題反饋
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的lua中的魔法字符转义问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell中单引号的嵌套
- 下一篇: 网址http格式的拆分