正则表达式忽略多个前缀并仅在它们没有一个或两个特定的硬编码属性时才匹配?

Regex to ignore multiple prefixes and match only if they dont have one or two specific hardcoded attributes?

我正在寻找一个 GoLang RE2 正则表达式,如果用户输入以下内容之一,它只会不匹配,所有这些都不能区分大小写:

.i l .i Latest .info l .info Latest p!i l p!i latest p!info l p!info latest

因此,在每一种情况下,如果用户仅键入前缀而没有在其后添加 latestl 或键入其他任何其他内容,则它们都有一个前缀和一个属性比前缀后的 latestl 包括任何数字或特殊字符。应该是匹配的。

我让 jerry 操纵了这个正则表达式: (?i)\A\.i (?:L.|[^L]+L)

这个正则表达式有点管用,但它只适用于 .i 前缀并检查前面的 L 并且不检查数字。 我不知道如何解决这个问题。 我不介意使用多个正则表达式,每个前缀一个。我尝试将 \.i 替换为其他前缀,将 (?:L.|[^L]+L) 部分替换为单词 LATEST。好像不行。

感谢您的帮助:)

Go 不支持环视。在这种情况下,您可以指定允许匹配的内容。

在这种情况下,您允许任何前缀可选地后跟“l”或“latest”以外的“词”

一个选项可以是

(?i)^(?:\.|p!)i(?:nfo)?\b(?:(?: +(?:la(?:t(?:e(?:s(?:t\S)?)?)?)?)| +(?:[^\sl]\S*|l[^\sa]\S*|la[^\st]\S*|lat[^\se]\S*|late[^\ss]\S*|lates[^\st]|latest\S+))(?: +.*)?)?$

部分

  • (?i) 不区分大小写的修饰符
  • ^ 字符串开头
  • (?:\.|p!)i 匹配 .ip!i
  • (?:nfo)?\b 可选择匹配 nfo 后跟单词边界
  • (?:非捕获组
    • (?:非捕获组
      • +(?:la(?:t(?:e(?:s(?:t\S)?)?)?)?)匹配1+个空格和lalatlatelates或者latest(后面跟at最新的至少一个非空白字符)
      • |
      • +(?:[^\sl]\S*|l[^\sa]\S*|la[^\st]\S*|lat[^\se]\S*|late[^\ss]\S*|lates[^\st]|latest\S+) 匹配 1+ 个空格后跟 6 个变体,这些变体可以开始相同的单词,不包括 1 个字符(也排除使用 \s 的空白字符),或者匹配单词后跟至少一个单个空白字符
    • )关闭非捕获组
    • (?: +.*)? 可选择匹配 1+ 个空格和 0+ 次除换行符之外的任何字符
  • )?关闭非捕获组并使其可选
  • $ 字符串结束

Regex demo