GLib正則表達式
Lua 在字符串庫中有其自己的本機模式語法,但是有時真正的正則表達式引擎會更有用。Wireshark隨附GLib的Regex實現,該實現本身基于Perl兼容正則表達式(PCRE)。通過與Lrexlib PCRE實現相同的語法和語義,該引擎通過著名的Lrexlib庫公開到Wireshark的Lua引擎中,但有一些區別,如下所示:
- 不支持使用自定義語言環境/字符表
- dfa_exec()不采用* ovecsize或 wscount*參數
- dfa_exec()對于部分匹配返回boolean true,沒有子捕獲信息
- 命名子組不會在返回表中(即,在match / tfind / exec中)返回名稱鍵輸入
- 該標志()函數仍然有效,返回所有標志,但兩個新的功能 compile_flags()和match_flags()只返回各自的標志,因為GLib的具有不同和較小的一套這樣的標志,正則表達式的編譯與匹配功能
- 對具有非ASCII字符的字符串使用一些斷言和POSIX字符類可能會匹配高階字符,因為即使設置了G_REGEX_RAW,glib也會始終設置PCRE_UCP。例如,*[:alpha;]匹配某些非ASCII字節。以下斷言有這個問題:\ b,\乙, *\ S,\ S,\ W,\ W。以下字符類有此問題:[:alpha:],[:alnum:],[:lower:],[:upper:],[:space:],[:word:]和[:graph:] 。
- 即使未指定,編譯標志G_REGEX_RAW始終被設置/使用。這是因為GLib默認情況下以UTF-8模式運行PCRE,而Lua字符串不支持UTF。
正則表達式
基于PCRE的GLib正則表達式。
如果正則表達式庫發現該模式無效,則所有以正則表達式模式作為參數的函數都將生成錯誤。
所有帶有字符串型正則表達式參數的函數也都接受編譯后的正則表達式。在這種情況下,將忽略compile flags參數(應提供為nils或省略)。
捕獲標志參數cf也可以作為字符串提供,其字符代表編譯標志。支持以下字符的組合(區分大小寫):
- i = G_REGEX_CASELESS-模式中的字母同時匹配大寫和小寫字母。可以通過“(?i)”選項設置在模式中更改此選項。
- m = G_REGEX_MULTILINE-默認情況下,GRegex將字符串視為由單行字符組成(即使它實際上包含換行符)。“行首”元字符(“ ^”)僅在字符串的開頭匹配,而“行尾”元字符(“ $”)僅在字符串的末尾或終止換行符之前匹配(除非已設置G_REGEX_DOLLAR_ENDONLY)。設置G_REGEX_MULTILINE時,“行首”和“行尾”結構分別在字符串中的任何換行之后或之前匹配,以及在最開始和結尾處匹配。可以通過“(?m)”選項設置在模式內更改此設置。
- s = G_REGEX_DOTALL-模式中的點元字符(“。”)匹配所有字符,包括換行符。沒有它,換行符將被排除。可以通過(“?s”)選項設置在模式中更改此選項。
- x = G_REGEX_EXTENDED-模式中的空白數據字符將被完全忽略,除非轉義或在字符類內部。空格不包含VT字符(代碼11)。此外,在字符類之外的未轉義“#”與下一個換行符(包括首尾)之間的字符也將被忽略。可以通過“(?x)”選項設置在模式中更改此設置。
- U = G_REGEX_UNGREEDY-反轉量詞的“greediness”,以便默認情況下它們不是貪婪的,但是如果后面跟有“?”,則變成貪婪的。也可以通過模式中的“(?U)”選項設置進行設置。
GRegex.new(pattern)
將正則表達式模式編譯成一個正則表達式對象,該對象的內部表示形式與所使用的庫相對應。然后,返回的結果可以由方法使用,例如match,exec等。正則表達式對象將自動進行垃圾回收。Arguments
pattern
A Perl-compatible regular expression pattern string
Returns
The compiled regular expression (a userdata object)
Errors
返回一個包含正則表達式庫定義的常數的數值的表,鍵為常數的(字符串)名稱。如果提供了table參數,則將其用作輸出表,否則將創建一個新表。然后,可以在可以指定編譯標志或執行標志的大多數函數和方法中使用返回表中包含的常量。它們還可用于與某些功能和方法的返回碼進行比較,以確定故障原因。
Arguments
table (optional)
A table for placing results into
Returns
A table filled with the results.
GRegex.compile_flags([table])
返回一個包含正則表達式庫為編譯標志定義的常數的數值的表,鍵為常數的(字符串)名稱。如果提供了table參數,則將其用作輸出表,否則將創建一個新表。
Arguments
table (optional)
A table for placing results into
Returns
A table filled with the results.
GRegex.match_flags([table])
返回一個包含正則表達式庫為匹配標志定義的常數的數值的表,其中的鍵為常數的(字符串)名稱。如果提供了table參數,則將其用作輸出表,否則將創建一個新表。
Arguments
*table (optional)
*
A table for placing results into
Returns
A table filled with the results.
GRegex.match(subject, pattern, [init], [cf], [ef])
從偏移量init到標志cf和ef,在字符串主題中搜索正則表達式模式的第一個匹配項。與類方法match函數不同,每次調用時都會編譯該模式。
Arguments
subject
Subject string to search
pattern
A Perl-compatible regular expression pattern string or GRegex object
init (optional)
start offset in the subject (can be negative)
cf (optional)
compilation flags (bitwise OR)
ef (optional)
match execution flags (bitwise OR)
Return
功后,按照它們在模式中出現的順序返回所有子字符串匹配項(“捕獲”)。對于未參與比賽的子模式,返回false。如果指定的模式沒有捕獲,則返回整個匹配的子字符串。失敗時,返回nil。
GRegex.find(subject, pattern, [init], [cf], [ef])
從偏移量init到標志ef,在字符串主題中搜索正則表達式模式的第一個匹配項。每次調用該模式時都會編譯該模式,這與類方法find函數不同。
Arguments
subject
Subject string to search
pattern
A Perl-compatible regular expression pattern string or GRegex object
init (optional)
start offset in the subject (can be negative)
cf (optional)
compilation flags (bitwise OR)
ef (optional)
match execution flags (bitwise OR)
Returns
成功時,按它們在模式中出現的順序返回匹配的起點(一個數字),匹配的終點(一個數字)以及所有子字符串匹配項(“捕獲”)。對于未參與比賽的子模式,返回false。失敗時,返回nil。
GRegex.gmatch(subject, pattern, [init], [cf], [ef])
返回迭代器,用于重復匹配字符串subj中的模式patt,但要遵循標志cf和ef。該函數旨在用于Lua構造的泛型。該模式可以是字符串,也可以是先前使用GRegex.new()編譯的GRegex對象。
Arguments
subject
Subject string to search
pattern
A Perl-compatible regular expression pattern string or GRegex object
init (optional)
start offset in the subject (can be negative)
cf (optional)
compilation flags (bitwise OR)
ef (optional)
match execution flags (bitwise OR)
Returns
迭代器函數由Lua調用。在每次迭代中(即,在每次匹配中),它都按照它們在模式中出現的順序返回所有捕獲(如果模式未指定捕獲,則返回整個匹配)。迭代將一直持續到主題不匹配為止。
GRegex.gsub(subject, pattern, [repl], [max], [cf], [ef])
搜索字符串主題中模式的所有匹配項,并根據參數repl和max替換它們。該模式可以是字符串,也可以是先前使用GRegex.new()編譯的GRegex對象。
Arguments
subject
Subject string to search
pattern
A Perl-compatible regular expression pattern string or GRegex object
repl (optional)
Substitution source string, function, table, false or nil
max (optional)
Maximum number of matches to search for, or control function, or nil
cf (optional)
Compilation flags (bitwise OR)
ef (optional)
Match execution flags (bitwise OR)
Returns
成功后,返回主題字符串以及進行的替換,找到的匹配數和進行的替換數。
GRegex.split(subject, sep, [cf], [ef])
將主題字符串主題拆分為多個部分(部分)。sep參數是表示各節之間的分隔符的正則表達式模式。該函數旨在用于Lua構造的泛型。該函數返回一個迭代器,用于重復匹配字符串subj中的模式sep,但要遵循標志cf和ef。sep模式可以是字符串,也可以是以前使用GRegex.new()編譯的GRegex對象。與gmatch不同,即使主題中沒有匹配項,也將至少有一個迭代遍。
Arguments
subject
Subject string to search
sep
A Perl-compatible regular expression pattern string or GRegex object
cf (optional)
compilation flags (bitwise OR)
ef (optional)
match execution flags (bitwise OR)
Returns
迭代器函數由Lua調用。在每次迭代中,它返回一個主題部分(可以是一個空字符串),然后是所有捕獲,其順序分別是它們在sep模式中出現的順序(如果sep模式未指定捕獲,則為整個匹配)。如果沒有匹配項(只能在最后一次迭代中發生),則在主題部分之后不返回任何內容。迭代將一直持續到主題結束。
GRegex.version()
返回一個返回字符串,其中包含所用庫的版本。
Returns
The version string
gregex:match(subject, [init], [ef])
從偏移量init到標志ef,在字符串主題中搜索正則表達式模式的第一個匹配項。
Arguments
subject
Subject string to search
init (optional)
start offset in the subject (can be negative)
ef (optional)
match execution flags (bitwise OR)
Returns
成功后,按照它們在模式中出現的順序返回所有子字符串匹配項(“捕獲”)。對于未參與比賽的子模式,返回false。如果指定的模式沒有捕獲,則返回整個匹配的子字符串。如果模式不匹配,則返回nil。
gregex:find(subject, [init], [ef])
從偏移量init到標志ef,在字符串主題中搜索正則表達式模式的第一個匹配項。
Arguments
subject
Subject string to search
init (optional)
start offset in the subject (can be negative)
ef (optional)
match execution flags (bitwise OR)
Returns
成功時,按它們在模式中出現的順序返回匹配的起點(一個數字),匹配的終點(一個數字)以及所有子字符串匹配項(“捕獲”)。對于未參與比賽的子模式,返回false。失敗時,返回nil。
gregex:exec(subject, [init], [ef])
從偏移量init到執行匹配標志ef,在字符串subject中搜索已編譯的GRegex對象的第一個匹配項。
Arguments
subject
Subject string to search
init (optional)
start offset in the subject (can be negative)
ef (optional)
match execution flags (bitwise OR)
Returns
成功后,返回第一個匹配項的起點(一個數字),第一個匹配項的終點(一個數字)和子字符串匹配項的偏移量(Lua術語中的“捕獲”),作為第三個結果,返回一張桌子。該表在相應子模式未參與比賽的位置包含false。失敗時,返回nil。示例:如果整個匹配項的偏移量為10,20,子字符串匹配項的偏移量為12,14和16,19,則該函數返回以下內容:10、20,{12,14,16,19}。
gregex:dfa_exec(subject, [init], [ef])
使用DFA匹配算法,將編譯后的正則表達式GRegex對象與給定的主題字符串subj匹配。
Arguments
subject
Subject string to search
init (optional)
start offset in the subject (can be negative)
ef (optional)
match execution flags (bitwise OR)
Returns
成功時,返回找到的匹配項的起點(一個數字),包含找到的匹配項的終點的表,第一個較長的匹配項以及找到的匹配項數作為第三個返回值。失敗時,返回nil。示例:如果找到3個匹配,它們從偏移量10開始,到偏移量15、20和25結束,則該函數返回以下內容:10,{25,20,15},3
gregex:__tostring()
返回一個字符串,其中包含有關GRegex對象的調試信息。
Returns
The debug string
Wireshark中文使用教程(開發版)
推薦文章: