2016-03-04 252 views
3

我必須找到所有以//標記開頭並且不包含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

有什麼想法嗎?

+1

什麼是正則表達式的味道?如果它是一個普通的正則表達式引擎,使用'\/\/[] * MARK [\ t] *:* [\ t] *(?:(?!ABCD)[^ \ n])* $'。是否適用於iOS? :) –

+0

它用於使用SwiftLiint提升特定標記的警告。我會檢查答案,並寫下如果他們工作:) –

回答

1

我假設你在使用ICU正則表達式的Swift中編碼。它支持向前看符號,因此,基於對回火貪婪的象徵,正則表達式將工作:

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

regex demo

正則表達式匹配

  • // - 兩個/
  • [ ]* - 0 +空格
  • MARK - 字面上的單詞MARK
  • [ \t]*:*[ \t]* - 0+空格或製表符,接着用0+冒號,再接着用0+製表符或空格
  • (?:(?!ABCD)[^\n])* - 強化貪婪令牌匹配任何非換行符號不啓動ABCD序列
  • $ - 字符串的結尾。
+1

作品:)非常感謝! –