它提高了可读性,并有助于使用人性化的结构构建正则表达式。此外,它允许注释和重用块,从而提高代码质量。
它只是一个构建器,所以它返回标准*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()等。
更多示例: