首页 > 解决方案 > Google RE2 Regex 转义句点和下划线错误

问题描述

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

我的代码是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_.]+$.

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

标签: regexre2

解决方案


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

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

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

细节

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

推荐阅读