regex - Google RE2 正则表达式转义句点和下划线错误

标签 regex re2

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

  • 不以 ._ 开头
  • 不以结尾。
  • 不允许连续出现两个 .
  • 仅限小写字母字符数字

我的代码是 username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0 -9_.]+$')

在线使用正则表达式模拟器可以正常工作

https://regex101.com/r/bDXMg3/2/

但是在 Google RE2 语法 中使用相同的语法(在 Firestore Security Rules 中使用)会引发大量错误

enter image description here

我尝试对每个 进行双重转义。

使用代码 username.matches('^(?!\\.)(?!_)(?!.*\\.$)(?!.*?\\.\\.) [a-z0-9_.]+$')

它只显示一个错误(开头是红色 ^ 符号),但随后它给出了下面的错误

enter image description here

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/

相关文章:

regex - grep regex忽略行尾的注释

java - 正则表达式 - 添加点前缀,不包括已经有点的单词

sql - BigQuery 返回正则表达式的所有匹配项

c++ - 使用 Google RE2 同时匹配多个正则表达式

regex - PowerShell-如何基于另一个文件中的内容更新文件

r - 文本挖掘 R 包和正则表达式来处理替换智能 curl 引号

regex - mod_rewrite 规则 : if URL contains a certain string

google-sheets - 从 APA 引文中提取文本

regex - 如何匹配包含unicode字符的完整字符串?

c++ - RE2 嵌套正则表达式小组赛