Google RE2正则表达式转义期和下划线错误

时间:2018-08-23 20:18:36

标签: regex re2

我正在尝试验证具有以下特征的username字符串:

  • 不以._开头
  • 不以.结尾
  • 不允许连续两个.
  • 仅小写的letter charactersnumbers

我的代码是username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$')

在线使用正则表达式模拟器可以正常工作

https://regex101.com/r/bDXMg3/2/

但是在 Google RE2语法(在Firestore Security Rules中使用)使用相同的语法会引发大量错误

enter image description here

我尝试将每个.

加倍转义

使用代码username.matches('^(?!\\.)(?!_)(?!.*\\.$)(?!.*?\\.\\.)[a-z0-9_.]+$')

它仅显示一个错误(开头为红色^符号),但随后却显示以下错误

enter image description here

Invalid regular expression pattern. Pattern: ^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$.

谁能让我知道我在做什么错?

1 个答案:

答案 0 :(得分:2)

RE2不支持先行(也不回首)。

但是,该模式可以在没有环视的情况下重写:

^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$

详细信息

  • ^-字符串的开头
  • [a-z0-9]-字母或数字
  • [a-z0-9_]*-零个或多个小写字母,数字或下划线
  • ([.][a-z0-9_]+)*-零个或多个序列
    • [.]-一个点
    • [a-z0-9_]+-一个或多个小写字母,数字或下划线
  • $-字符串的结尾。