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

Google RE2 Regex Escaping periods and underscores error

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

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

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

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

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

然后我尝试对每个进行两次转义 .

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

它只显示一个错误(开头的红色 ^ 符号),但它给我以下错误

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

谁能告诉我我做错了什么?

RE2 不支持前瞻(也不支持后视)。

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

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

详情

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