Lua 模式匹配 vs 正則表示式


眾所周知,Lua 遵循的模式匹配設計與通常基於**POSIX**的正則表示式設計有很大不同。

它們之間幾乎沒有共同點,並且在兩者中,**POSIX** 是一種更受歡迎的方法,因為它在示例變得更復雜時效果很好,並且可以處理各種情況,但這並不意味著 Lua 的模式匹配不好。事實上,它更容易理解,並且也能完美地工作。

**Lua** 字串庫使用一組特殊的字元用於語法匹配,而不是使用正則表示式。兩者可能非常相似,但 Lua 模式匹配更受限制並且具有不同的語法。

雖然可以很容易地理解,在某些情況下 POSIX 設計優於 Lua 的模式匹配,但在以下幾點中,我將嘗試討論為什麼 Lua 的模式匹配設計也更可取。

請考慮以下幾點:

  • **引用**極其簡單且規則。引用字元為 %,因此它始終與字串引用字元 \ 不同,這使得 Lua 模式比 POSIX 正則表示式(當需要引用時)更容易閱讀。
  • Lua 有一個與“最長匹配”* 運算子一起使用的“最短匹配”修飾符。例如,s:find '%s(%S-)%:' 查詢以空格開頭並以冒號結尾的最短非空格(不匹配)字元序列。
  • Lua 提供了**“捕獲”**,並且可以將多個捕獲作為匹配呼叫的結果返回。此介面比透過副作用捕獲子字串或擁有必須對其進行查詢以查詢捕獲的某些隱藏狀態要好得多。您可以使用括號捕獲語法。
  • 模式匹配的語法非常**輕量級**,常見的字元型別包括大寫字母**(%u)**、十進位制數字**(%d)**、空格字元**(%s)**等。任何字元型別都可以透過使用相應的大寫字母來補充,因此模式 %S 匹配任何非空格字元。
  • 還有 %bxy,它匹配一對平衡的分隔符,例如括號或大括號。在 POSIX 正則表示式中無法進行平衡括號匹配。

以上所有要點都表明,Lua 的模式匹配模型絕對是一個值得使用的工具。

更新於: 2021-07-19

958 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.