2015-12-07 42 views
1

我嘗試了一切,但是我的正則表達式的技巧很糟糕。找到沒有函數調用的字符串

我的情況是,我想解析文件.swift來提取字符串,例如我有一個包含許多行的類,在這個文件中我有這樣的東西。

let textReference1Count = "text 1".count() 
let textReference2Count = "text 2" 
let textReference3Count = "text 3".count() 

我有這樣的正則表達式(["'])(?:(?=(\\?))\2.)*?\1,有了它,我可以返回所有Strings

在這種情況下的任務是隻返回Strings沒有.count()

我讀到ˆ,但每次我試圖使用時間取消所有的搜索。

感謝推進

編輯:

解決這種情況是(["'])(?:(?=(\\?))\2.)*?\1(?!.count)

+2

調查負面看法。 – Linuxios

+0

謝謝@Linuxios我遵循你的提示,並做這個解決方案'([「'])(?:(?=(\\?))\ 2。)*?\ 1(?!。count)':D工作正常 – ViTUu

+0

很高興我可以幫忙。 – Linuxios

回答

1

www.rexegg.com/regex-best-trick.html提供了可在這種情況下,可以使用一種方法的詳細說明。 當試圖匹配的模式,但不包括一些類似的模式,你可以使用:

ExcludePatternA | ExcludePatternB | ExcludePatternC | (TheOneIWantToMatch) 

然後在處理結果忽略了整體搭配,只有使用從捕獲組匹配的代碼。

在你的情況,下面的正則表達式應該工作:

(["'])(?:(?=(\\?))\2.)*?\1\.count\(\)|((["'])(?:(?=(\\?))\5.)*?\4) 

這將匹配的字符串,然後.Count之間的(),或只是一個字符串。 在代碼中處理結果時,只查看捕獲組3. 它將包含最後沒有.count()的字符串。

+0

感謝您的回答,但是當我嘗試你的例子時,發現所有'String',在我的情況下,我只需要看只有沒有.count的字符串,我這樣做'([''])(? :(?=(\\?))\ 2。)*?\ 1(?!。count)' – ViTUu

+0

訣竅是隻看捕獲組3。 –

相關問題