導航:首頁 > 凈水問答 > lua過濾特殊字元的函數

lua過濾特殊字元的函數

發布時間:2023-01-28 19:01:38

㈠ lua入門筆記7 字元串庫

Lua 中的 string 和 c #中相同, string 類型的值一旦改變,便要為新值開辟空間,並指向此空間。也就是說每次對 string 變數進行更改操作時返回的是一個新的值,下面的函數中就不再過多去說明了。

其他還有很多這里只是簡單地舉幾個例子。

Lua 中由於考慮大小,沒有支持正則表達式。而採用了自己的模式匹配。

string.find 函數用於在一個給定的目標字元串中搜索一個模式。最簡單的是搜索單詞。如果趙傲這個單詞,他就會返回單詞的其實索引和結束所用,如果沒找到則返回 nil

如果匹配成功,就可以用 string,find 的返回值結果來調用 string.sub 來提取出目標字元串中匹配於該模式的那部分子串。
string.find 還有一個可選的第三參數,他是一個索引,告訴函數應從目標字元串的那個位置開始搜索。

函數 string.math 和函數 string.find 在某種意義上很相似,它也是用一個在字元串中搜索的一種模式。不同的是, string.math 返回的是目標字元串中模式匹配的那部分子串,而並非位置。
對於固定的模式,該函數可能沒有什麼意義例如 "hello" 。但當使用變數模式是,它的特性就顯現出來了。

string.gusb 函數有3個參數:目標字元串、模式、替換字元串 作用就是將所有出現該模式的地方替換為替換字元串

另外還有可選的第四個參數,可以限制替換的次數

函數是 string.gsub 還有一種結果,即實際替換的次數,例如下面就是一種統計字元串中空格數量的簡單方法

string.gmatch 會返回一個函數。通過這個函數可以遍歷到一個字元串中所有出現指定摸式的地方。

其中模式 "%a+" 表示匹配一個或多個字母字元的序列(也就是單詞),這里會遍歷其中所有的單詞,並存入其中。在模式中"點"具有特殊的意義,因此若要表示一個點必須寫為 "%."

介意用字元分類創建更多有用的模式。字元分類就是模式中的一項。可以與一個熱頂級和中的任意字元相匹配。例如分類"%d"可匹配任意數字。例如可以用
"%d%d/%d%d/%d%d%d%d" 來搜索符合 "dd/mm/yyyy" 格式的日期

下面是所有的字元分類

這些分類的大寫行使表示他們的補集,例如 "%A" 表示所有非字母字元

在模式里,還有一些字元串被稱為「魔法字元」他們有著特殊的含義。這些魔法字元有
{ } . % + - * ? [ ] ^ $
字元串 % 作為這些魔法字元的轉義符,例如 "%." 表示匹配一個點 "%%" 表示匹配字元 "%" 不僅可以把 "%" 用於魔法字元,還可以用於其他所有非字母數字的字元。當不確定某個字元是不是需要被轉義是,應該直接前置一個轉義符。
對於 lua 來說,模式就是普通的字元串。並想起他字元串一樣遵循相同的規則。只有模式函數才會解釋它們,此時參會將 "%" 當做轉義符來處理。
在一堆放括弧內將不同的字元分類或者單個字元組合起來,即可創造出屬於用戶自己的字元分類,這種新的字元分類叫做 字元集(char-set) 。例如,字元集 ["%w_"] 表示同時匹配字母、數字和下劃線。字元集 [01] 表示匹配二進制數字 字元集 [%[%]] 表示匹配方括弧本身。如果需要統計一段文本中母音的數量,可以這么寫

在字元集中表示一段字元范圍的做法是寫出自付范圍的第一個字元和最後一個字元並用橫線連接它們,但這種形式用的較少因為大部分常用的字元范圍都已經預定義好了。如 [0-9] 即為 %d
[0-9a-fA-F] 則為 "%x" 不過如果需要查找一個8進制的數字,那麼可以寫 [0-7] 而不是 [01234567] 。在一個字元集前加一個 '^' 即可表示這個字元集的補集。例如 [^0-7] 表示所有非八進制數字的字元。而模式 [^ ] 則表示了除了換行符之外的其他字元。對於簡單地分類,使用大寫形式也可以得到他的補集, "%S" 顯然比 [^%s] 簡答
也可以通過修飾符來藐視模式中的重復可選部分。lua提供四種修飾符

「+」 修飾符科普配屬於字元串分類的一個或多個字元。他總是獲取與模式相匹配的最長序列,模式 "%a+" 表示一個或多個字母,即單詞:

模式 "%d+" 匹配一個或多個數組(一個整數)

修飾符 "*" 類似於 "+" ,但它還接受出現0次的情況。一種典型用途是匹配一個模式不同部分之間的空格。 比如說像匹配 () 或者 ( ) 這樣的一對圓括弧,可以用 "%(%s*%)" 其中的 %s* 可以匹配0到多個空格
另一個示例是使用模式 "[_%a][_%w]*" 來匹配lua中的標識符,標識符是一個由字母或下劃線開始,伴隨0到多個下劃線、字母或數字的序列。
修飾符 "-" 和 "*" 一樣,也是用於匹配0個或多個字元的。不過他會匹配最短的子串。雖然看似二者沒什麼差別但效果截然不同。如果使用 "[_%a][_%w]- " 來查找一個標識符時,他只會查找到第一個字母,因為 "[_%w]-" 總是匹配空串。假設要查找一個c程序中的注釋,通常會首先嘗試 "/%*.*%/" 然後由於 ".* "會盡可能的擴展,因此程序中第一個 "/*" 只會與最後一個 "*/" 相匹配

但若使用 ".-"話就會變成這樣

修飾符"?"用於匹配一個可選的字元。例如要在一段文本中尋找一個整數,而這個整數可以包括一個可選的正負號。那麼適用模式"[+-]?%d+"就可以完成這項任任務。他可以匹配項
"-12" "23" "+1000"這樣的數字,而"[+-]"是一個匹配'+'號和'-'號的字元分類,後面的'?'說明可這個符號是可選的。與其他系統不同的是,Lua中的修飾符只能用用於一個字元分類,無法對一組分類進行修飾。無法寫出一個匹配可選打次的模式。
如果一個模式以一個'^'起始,那麼他只會匹配目標字元串的開頭部分。如果模式以'$'結尾,他只會匹配目標字元串的結尾部分。

在模式中,還可以用"%b",用於匹配成對的字元。他的寫法是"%b<x><y>" 其中<x>和<y>是兩個不同的字元串,<x>作為一個起始字元,<y>是作為一個結束字元。例如模式"%b()"可匹配以'('開始,並以')'結束的子串s

Lua 中的 string 和 c #中相同, string 類型的值一旦改變,便要為新值開辟空間,並指向此空間。也就是說每次對 string 變數進行更改操作時返回的是一個新的值,下面的函數中就不再過多去說明了。

其他還有很多這里只是簡單地舉幾個例子。

Lua 中由於考慮大小,沒有支持正則表達式。而採用了自己的模式匹配。

string.find 函數用於在一個給定的目標字元串中搜索一個模式。最簡單的是搜索單詞。如果趙傲這個單詞,他就會返回單詞的其實索引和結束所用,如果沒找到則返回 nil

如果匹配成功,就可以用 string,find 的返回值結果來調用 string.sub 來提取出目標字元串中匹配於該模式的那部分子串。
string.find 還有一個可選的第三參數,他是一個索引,告訴函數應從目標字元串的那個位置開始搜索。

函數 string.math 和函數 string.find 在某種意義上很相似,它也是用一個在字元串中搜索的一種模式。不同的是, string.math 返回的是目標字元串中模式匹配的那部分子串,而並非位置。
對於固定的模式,該函數可能沒有什麼意義例如 "hello" 。但當使用變數模式是,它的特性就顯現出來了。

string.gusb 函數有3個參數:目標字元串、模式、替換字元串 作用就是將所有出現該模式的地方替換為替換字元串

另外還有可選的第四個參數,可以限制替換的次數

函數是 string.gsub 還有一種結果,即實際替換的次數,例如下面就是一種統計字元串中空格數量的簡單方法

string.gmatch 會返回一個函數。通過這個函數可以遍歷到一個字元串中所有出現指定摸式的地方。

其中模式 "%a+" 表示匹配一個或多個字母字元的序列(也就是單詞),這里會遍歷其中所有的單詞,並存入其中。在模式中"點"具有特殊的意義,因此若要表示一個點必須寫為 "%."

介意用字元分類創建更多有用的模式。字元分類就是模式中的一項。可以與一個熱頂級和中的任意字元相匹配。例如分類 "%d" 可匹配任意數字。例如可以用
"%d%d/%d%d/%d%d%d%d" 來搜索符合"dd/mm/yyyy"格式的日期

下面是所有的字元分類

這些分類的大寫行使表示他們的補集,例如"%A"表示所有非字母字元

在模式里,還有一些字元串被稱為「魔法字元」他們有著特殊的含義。這些魔法字元有
{ } . % + - * ? [ ] ^ $
字元串 % 作為這些魔法字元的轉義符,例如 "%." 表示匹配一個點 "%%" 表示匹配字元 "%" 不僅可以把 "%" 用於魔法字元,還可以用於其他所有非字母數字的字元。當不確定某個字元是不是需要被轉義是,應該直接前置一個轉義符。
對於 lua 來說,模式就是普通的字元串。並想起他字元串一樣遵循相同的規則。只有模式函數才會解釋它們,此時參會將 "%" 當做轉義符來處理。
在一堆放括弧內將不同的字元分類或者單個字元組合起來,即可創造出屬於用戶自己的字元分類,這種新的字元分類叫做 字元集 (char-set) 。例如,字元集 ["%w_"] 表示同時匹配字母、數字和下劃線。字元集 [01] 表示匹配二進制數字 字元集 [%[%]] 表示匹配方括弧本身。如果需要統計一段文本中母音的數量,可以這么寫

在字元集中表示一段字元范圍的做法是寫出自付范圍的第一個字元和最後一個字元並用橫線連接它們,但這種形式用的較少因為大部分常用的字元范圍都已經預定義好了。如 [0-9] 即為 %d
[0-9a-fA-F] 則為 "%x" 不過如果需要查找一個8進制的數字,那麼可以寫 [0-7] 而不是 [01234567] 。在一個字元集前加一個 '^' 即可表示這個字元集的補集。例如 [^0-7] 表示所有非八進制數字的字元。而模式 [^ ] 則表示了除了換行符之外的其他字元。對於簡單地分類,使用大寫形式也可以得到他的補集, "%S" 顯然比 [^%s] 簡答
也可以通過修飾符來藐視模式中的重復可選部分。 lua 提供四種修飾符

「+」 修飾符科普配屬於字元串分類的一個或多個字元。他總是獲取與模式相匹配的最長序列,模式 "%a+" 表示一個或多個字母,即單詞:

模式 "%d+" 匹配一個或多個數組(一個整數)

修飾符 "*" 類似於 "+" ,但它還接受出現0次的情況。一種典型用途是匹配一個模式不同部分之間的空格。 比如說像匹配 () 或者 ( ) 這樣的一對圓括弧,可以用 "%(%s*%)" 其中的 %s* 可以匹配0到多個空格
另一個示例是使用模式 "[_%a][_%w]*" 來匹配 lua 中的標識符,標識符是一個由字母或下劃線開始,伴隨0到多個下劃線、字母或數字的序列。
修飾符 "-" 和 "*" 一樣,也是用於匹配0個或多個字元的。不過他會匹配最短的子串。雖然看似二者沒什麼差別但效果截然不同。如果使用 "[_%a][_%w]- " 來查找一個標識符時,他只會查找到第一個字母,因為 "[_%w]-" 總是匹配空串。假設要查找一個c程序中的注釋,通常會首先嘗試 "/%*.*%/" 然後由於 ".*" 會盡可能的擴展,因此程序中第一個 "/*" 只會與最後一個 "*/" 相匹配

但若使用 ".-" 話就會變成這樣

修飾符 "?" 用於匹配一個可選的字元。例如要在一段文本中尋找一個整數,而這個整數可以包括一個可選的正負號。那麼適用模式 "[+-]?%d+" 就可以完成這項任任務。他可以匹配項
"-12" "23" "+1000" 這樣的數字,而 "[+-]" 是一個匹配 '+' 號和 '-' 號的字元分類,後面的 '?' 說明可這個符號是可選的。與其他系統不同的是, Lua 中的修飾符只能用用於一個字元分類,無法對一組分類進行修飾。無法寫出一個匹配可選打次的模式。
如果一個模式以一個 '^' 起始,那麼他只會匹配目標字元串的開頭部分。如果模式以 '$' 結尾,他只會匹配目標字元串的結尾部分。

在模式中,還可以用 "%b" ,用於匹配成對的 字元 。他的寫法是 "%b<x><y>" 其中 <x> 和 <y> 是兩個不同的字元串, <x> 作為一個起始字元, <y> 是作為一個結束字元。例如模式 "%b()" 可匹配以 '('開始,並以')' 結束的子串
s="a (enclosed (in) parenthesses) line"
print(string.gsub(s,"%d()","") -->a line

這種模式的典型用法包括 "%b()" "%b[]" "%b{}" "%b<>"

捕獲功能可根據一個模式從目標字元串中抽出匹配與該模式的內容。在指定捕獲時,應將模式中需要捕獲的部分寫到一對圓括弧內。

這里括弧中的值為匹配兩個單詞,括弧外是首先匹配空格然後匹配等號繼續匹配空格。並且會把表達式中用 () 括起來的值返回。

㈡ lua中怎樣屏蔽掉一個字元串中的所有中文標點符號(%p只能實現過濾英文的標點符號)

string.gsub(s,'%,','')
半形的符號似乎也是特殊字元把 也加上轉義把
豆號問號什麼符號你就多加幾句把

㈢ lua腳本怎麼取出自己想要的的部分字元

你好,以前沒接觸過lua,剛自己試了一下,就按照你問題中的"23^Hello^你好^2000^world.txt"這個字元串為例,以^為分隔符來說吧:
---------------start---------------
str = "23^Hello^你好^2000^world.txt"
list = table.pack()
for w in string.gmatch(str, "[^^]+") do
print(w)
table.insert(list, w)
end
---------------start---------------
解釋:代碼共6行,
第1行:定義一個變數str,內容為"23^Hello^你好^2000^world.txt",這也是我們要處理的字元串.
第二行: 定義一個空列表,它是用在下面的for循環中,存放以"^"作為分隔符的每一部分
第三行:簡單來看是個for循環,深入一點來看,也就是string.gmatch(str,"[^^]+")這部分需要解釋一下,它表示調用的是string庫的gmatch()函數,這個函數有兩個參數,第1個參數為要處理的字元串,咱們這里就是上面定義的str,第二個參數就是我們要在這個字元串中匹配什麼樣的內容,這里的匹配內容寫的是"[^^]+",學過正則的很好理解,單純的[abc]表示匹配任意單個字元a或b或c,有一點特殊的是一旦[]中的字元是以^打頭的,則表示匹配任意非[]中列出的字元,如[^abc]表示匹配任意除abc外的其它任一字元,所以[^^]解釋為匹配除^外的任一字元,舉例來說,如果我們有字元串"23^Hello",如果用[^^]匹配的話,最終得到的是7個單個字元,即"2","3","H","e","l","l","o",顯示這不符合我們的題意,所以在這基礎上改進了一下,即在其後又加了個+號,[^^]+,這里的+號表示盡可能多地匹配它前面內容,這里也就是盡可能多地匹配[^^],所以[^^]+在處理"23^Hello"的時候,結果得到的就是"23","Hello".這里關於用到的這個正則說的不是太清楚,多練練就明白了。最後,第3行把函數部分給替換掉後,可以理解為:for w in [23,Hello,你好,2000,world.txt],每次從[]中取一個值賦給w,然後執行for下面的語句,接著往下看
第4行,接第3行尾,就是把每次賦給w的值都列印出來
第5行,將每次賦給w的值都追加到列表list中
第6行,for循環語法上的閉合關鍵字,這個沒啥說的
到此,我們得到了一個列表值為[23,Hello,你好,2000,world.txt]的list,此時我們就可以使用list[n]來取我們想要的值了 。
*.如果你要問上面最3條最後不都有[23,Hello,你好,2000,world.txt]了嘛,為啥還要那麼麻煩,直接使用string.gmatch()函數不就行了嘛,其實第3條結尾我那麼寫只是為了讓你好理解,實際上gmatch()函數的返回值並不是列表,而是一個可迭代的函數,而for循環的作用就是把gmatch()函數返回的這個可迭代的函數中的每個元素都取出來並賦給列表list
*.說的有點啰嗦了,希望對你有幫助吧,另外,我從沒用過lua,也是剛查了查,自己實踐了一下,希望不會形成誤導

㈣ lua中怎麼替換掉字元串中的$特殊字元

由於$是模式的特殊字元, 要使用普通的$字元, 則去掉它的特殊含義.
用 %$

閱讀全文

與lua過濾特殊字元的函數相關的資料

熱點內容
除垢硅磷晶有毒嗎 瀏覽:310
邱淑芬風月片全部 瀏覽:735
柬埔寨童子軍電影 瀏覽:765
吉利遠景車載空調濾芯怎麼拆 瀏覽:988
米家空氣凈化器3濾芯怎麼更換 瀏覽:502
什麼是p5凈水機 瀏覽:710
紙廠污水處理塔 瀏覽:1
吸塵器濾芯怎麼放 瀏覽:966
新奇書網txt 瀏覽:481
聯塑牌110公分污水管怎麼樣 瀏覽:223
超濾濾芯過濾最低水壓 瀏覽:390
眼鏡是水晶石頭的好還是樹脂的好 瀏覽:667
關於母乳電影 瀏覽:869
地坑過濾器交貨 瀏覽:945
吸管飲水機礦泉水怎麼開 瀏覽:213
排污水屬於環境保護費嗎 瀏覽:116
鹽酸清RO膜 瀏覽:591
舊的ro膜可用嗎 瀏覽:816
韓國李恩美的全部影片 瀏覽:694
刻在心底的名字小說 瀏覽:835