我正在尝试验证具有以下特征的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_.]+$.
答案 0 :(得分:2)
RE2不支持先行(也不回首)。
但是,该模式可以在没有环视的情况下重写:
^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$
详细信息
^
-字符串的开头[a-z0-9]
-字母或数字[a-z0-9_]*
-零个或多个小写字母,数字或下划线([.][a-z0-9_]+)*
-零个或多个序列
[.]
-一个点[a-z0-9_]+
-一个或多个小写字母,数字或下划线$
-字符串的结尾。