【问题标题】:Regex - sets subtraction正则表达式 - 设置减法
【发布时间】:2016-06-18 04:08:31
【问题描述】:

我必须找到所有以 //MARK 开头但不包含 sting ABCDS 的字符串。 我进行了一些尝试,但都失败了。这里最大的问题是标记集合 A-B。

(\/\/[ ]*MARK[ \t]*[:]*[ \t]*[^\n(?P=ABCD)]*)

它应该适用于:

//MARK: MarABdasdsd
//MARK sthIsHere

但不应该匹配:

//MARK: great marABCDE

我能够找到所有案例,但不知道如何删除这个案例。我只能使用单个正则表达式。 我知道很多帖子negate the whole regex pattern when negative lookaround doesn't work

有什么想法吗?

【问题讨论】:

  • 什么是正则表达式?如果是常规正则表达式引擎,请使用\/\/[ ]*MARK[ \t]*:*[ \t]*(?:(?!ABCD)[^\n])*$。它适用于 iOS 吗? :)
  • 它用于使用 SwiftLiint 对特定标记发出警告。我会检查答案并写下它们是否有效:)

标签: regex regex-negation regex-lookarounds swiftlint


【解决方案1】:

我假设您正在使用 ICU 正则表达式风格的 Swift 进行编码。它支持前瞻,因此,基于缓和贪婪令牌的正则表达式将起作用:

//[ ]*MARK[ \t]*:*[ \t]*(?:(?!ABCD)[^\n])*$

regex demo

正则表达式匹配

  • // - 两个/
  • [ ]* - 0+ 个空格
  • MARK - 字面意思MARK
  • [ \t]*:*[ \t]* - 0+ 个空格或制表符后跟 0+ 个冒号,后跟 0+ 个制表符或空格
  • (?:(?!ABCD)[^\n])* - 与任何不以ABCD 序列开头的非换行符匹配的缓和贪婪令牌
  • $ - 字符串结束。

【讨论】:

  • 工作 :) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多