regex - Google RE2 Regex 转义句点和下划线错误
问题描述
我正在尝试验证username
具有以下特征的字符串:
- 不以
.
or开头_
- 不以 a 结尾
.
- 不允许
.
连续两个 - 只有小写
letter characters
和numbers
我的代码是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_.]+$.
谁能让我知道我做错了什么?
解决方案
RE2 不支持前瞻(也不后瞻)。
但是,可以在没有环视的情况下重写该模式:
^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$
细节
^
- 字符串的开始[a-z0-9]
- 一个字母或数字[a-z0-9_]*
- 零个或多个小写字母、数字或下划线([.][a-z0-9_]+)*
- 零个或多个序列[.]
- 一个点[a-z0-9_]+
- 一个或多个小写字母、数字或下划线
$
- 字符串结束。
推荐阅读
- javascript - document.querySelectorAll 仅在检查 DOM 后返回值
- amazon-web-services - Nginx 代理上传到 s3?
- r - 我们可以使用 R 中的 ggplot2 更改绘图周围区域的颜色吗?
- csv - 如何跨相似数据的不同文件夹使用 Power BI 数据模型
- python - 仅当它们的值没有一定数量的重复项时才选择字典键
- java - 尝试安装 Eclipse,但出现“Java 已启动但返回退出代码 = 1”
- wpf - 如何从资源 WPF 在声音播放器中添加声音
- typescript - TypeScript - 全局导入不适用于 MomentJS
- javascript - JavaScript 运行时
- javascript - 更新数组中的最后一项