我正在尝试验证具有以下特征的用户名
字符串:
- 不以
.
或_
开头 - 不以
结尾。
- 不允许连续出现两个
.
- 仅限小写
字母字符
和数字
我的代码是 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_]+
- 一个或多个小写字母、数字或下划线
$
- 字符串结尾。
关于regex - Google RE2 正则表达式转义句点和下划线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51993680/