正则表达式 - 设置减法

时间:2016-03-04 12:12:25

标签: regex regex-negation regex-lookarounds swiftlint

我必须找到以// MARK开头的所有字符串,它们不包含刺痛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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

请参阅regex demo

正则表达式匹配

  • // - 两个/
  • [ ]* - 0+空格
  • MARK - 字面词MARK
  • [ \t]*:*[ \t]* - 0 +空格或制表符后跟0 +冒号后跟0 +制表符或空格
  • (?:(?!ABCD)[^\n])* - 与未启动ABCD序列的任何非换行符号匹配的驯化贪婪令牌
  • $ - 字符串结束。