为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
米脂 2022-07-18 17:10:24
我正在寻找一个 GoLang RE2 正则表达式,如果用户键入以下内容之一,它只会不匹配,所有这些都不能区分大小写:.i l .i Latest .info l .info Latest p!i l p!i latest p!info l p!info latest因此,在每一种情况下,如果用户只输入前缀而没有latestor之后,或者在前缀之外和之后输入l任何其他内容,包括任何数字或特殊字符,则在每一种情况下,它都有一个前缀和一个属性。这应该是一场比赛。latestl我已经杰里操纵了这个正则表达式: (?i)\A\.i (?:L.|[^L]+L)这个正则表达式有些工作,但它只适用于.i前缀并检查L前面的 a 而不检查数字。我无法思考如何解决这个问题。我不介意使用多个正则表达式,每个前缀一个。我尝试将 替换为\.i其他前缀,将(?:L.|[^L]+L)部分替换为LATEST. 这似乎不起作用。谢谢您的帮助 : )
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

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

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

一种选择可能是

(?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+ 个空格和la lat late lateslatest (后跟至少一个非空白字符以表示最新)

    • |或者

    • +(?:[^\sl]\S*|l[^\sa]\S*|la[^\st]\S*|lat[^\se]\S*|late[^\ss]\S*|lates[^\st]|latest\S+)匹配 1+ 个空格后跟 6 个变体,这些变体可以以相同的单词开头,不包括 1 个字符(也排除使用 的空白字符\s),或匹配后跟至少一个空白字符的单词

    • (?:非捕获组

    • )关闭非捕获组

    • (?: +.*)?可选匹配 1+ 个空格和 0+ 次除换行符以外的任何字符

    • )?关闭非捕获组并使其可选

    • $字符串结束



    查看完整回答
    反对 回复 2022-07-18
    • 1 回答
    • 0 关注
    • 83 浏览
    慕课专栏
    更多

    添加回答

    举报

    0/150
    提交
    取消
    意见反馈 帮助中心 APP下载
    官方微信