3

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

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

它应该与:

//MARK: MarABdasdsd
//MARK sthIsHere

但不应该匹配:

//MARK: great marABCDE

我能够找到所有案例,但不知道如何删除这个案例。我只能使用单个正则表达式。我知道当负面环顾不起作用时,许多帖子否定了整个正则表达式模式

有任何想法吗?

4

1 回答 1

1

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

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

查看正则表达式演示

正则表达式匹配

  • //- 二/
  • [ ]*- 0+ 个空格
  • MARK- 一个字面意思MARK
  • [ \t]*:*[ \t]*- 0+ 个空格或制表符后跟 0+ 个冒号,后跟 0+ 个制表符或空格
  • (?:(?!ABCD)[^\n])*- 与任何不开始ABCD序列的非换行符匹配的经过调和的贪婪令牌
  • $- 字符串结束。
于 2016-03-04T12:35:52.370 回答