Google RE2 正则表达式转义句点和下划线错误
Google RE2 Regex Escaping periods and underscores error
我正在尝试验证具有以下特征的 username
字符串:
- 不是以
.
或 _
开头
- 不以
.
结尾
- 不允许连续出现两个
.
- 只有小写
letter characters
和 numbers
我的密码是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_]+
- 一个或多个小写字母、数字或下划线
$
- 字符串结尾。
我正在尝试验证具有以下特征的 username
字符串:
- 不是以
.
或_
开头
- 不以
.
结尾
- 不允许连续出现两个
.
- 只有小写
letter characters
和numbers
我的密码是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_]+
- 一个或多个小写字母、数字或下划线
$
- 字符串结尾。