正则表达式 - 设置减法

Regex - sets subtraction

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

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

它应该适用于:

//MARK: MarABdasdsd
//MARK sthIsHere

但不应该匹配:

//MARK: great marABCDE

我能找到所有案例,但不知道如何删除这个案例。我只能使用单个正则表达式。 我知道很多帖子

有什么想法吗?

我假设您在使用 ICU 正则表达式风格的 Swift 中编码。它支持前瞻,因此,基于调节贪婪标记的正则表达式将起作用:

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

regex demo

正则表达式匹配

  • // - 两个 /
  • [ ]* - 0+ 个空格
  • MARK - 一个字面词 MARK
  • [ \t]*:*[ \t]* - 0+ 个空格或制表符后跟 0+ 个冒号后跟 0+ 个制表符或空格
  • (?:(?!ABCD)[^\n])* - 匹配任何不开始 ABCD 序列
  • 的非换行符的调节贪婪标记
  • $ - 字符串结尾。