Google RE2 Regex 转义句号和下划线错误

sie*_*fix 4 regex re2

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

  • 不以.或开头_
  • 不以a结尾 .
  • 不允许.连续两个
  • 只有小写letter charactersnumbers

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

在线使用正则表达式模拟器它正在工作

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

但是在Google RE2 语法中使用相同的语法(在Firestore 安全规则中使用)会引发大量错误

在此处输入图片说明

我试图然后双重逃避每个 .

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

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

在此处输入图片说明

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

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

Wik*_*żew 8

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

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

^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$
Run Code Online (Sandbox Code Playgroud)

细节

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