rex:Golang的正規表示式生成器

banq發表於2022-06-20

它提高了可讀性,並有助於使用人性化的結構構建正規表示式。此外,它允許註釋和重用塊,從而提高程式碼質量。
它只是一個構建器,所以它返回標準*regexp.Regexp。用字串切換到普通的正規表示式沒有問題。:)
該庫支援大多數正規表示式語法。

示例 ipv4 檢查:

ipv4Octet := rex.Group.Composite(
    // One of 250-255 | 200-249 | 0-199.
    rex.Group.Define( // 250-255.
        rex.Common.Text("25"),
        rex.Chars.Range('0', '5'),
    ).NonCaptured(),
    rex.Group.Define( // 200-249.
        rex.Chars.Single('2'),
        rex.Chars.Range('0', '4'),
        rex.Chars.Digits(),
    ).NonCaptured(),
    rex.Group.Define( // 000-199.
        rex.Chars.Runes("01").Repeat().ZeroOrOne(),
        rex.Chars.Digits(),
        rex.Chars.Digits().Repeat().ZeroOrOne(),
    ).NonCaptured(),
).NonCaptured()

rex.New(rex.Group.Define(
    rex.Group.Define(
        ipv4Octet,
        // Numbers are divided by a dot.
        rex.Chars.Single('.'),
    ).NonCaptured().Repeat().Exactly(3),
    ipv4Octet,
)).String() // Or MustCompile or Compile.


它將產生以下正規表示式:

^(?:(?:(?:(?:25[0-5])|(?:2[0-4]\d)|(?:[01]?\d\d?))\.){3}(?:(?:25[0-5])|(?:2[0-4]\d)|(?:[01]?\d\d?)))$


它需要更多的程式碼,但它有助於簡單地使用可重用的塊和模式來描述正規表示式。

它有常見的可重用塊,如rex.Helper.Phone(),rex.Helper.IP()等。
更多示例:

https://github.com/hedhyw/rex/blob/main/examples_test.go

相關文章