2014-06-18 29 views
4

我正在將一個基於CoreText的應用程序轉換爲Swift,並且在將正則表達式匹配到文本時遇到問題。RegularExpression matchesInString Swift中的問題

這是示例代碼

let regexOptions = NSRegularExpressionOptions.CaseInsensitive | NSRegularExpressionOptions.DotMatchesLineSeparators 
let regex = NSRegularExpression.regularExpressionWithPattern("(.*?)(<[^>]+>|\\Z)", options: regexOptions, error: nil) 
var results: Array<NSTextCheckingResult> = regex.matchesInString(text, options: 0, range: NSMakeRange(0, countElements(text))) 

根據該文檔中,matchesInString函數返回的NSTextCheckingResults陣列,但是編譯器會抱怨指出「類型中的表達anyObject []不容被轉換爲「NSMatchingOptions」任何想法什麼可能是錯在這裏

+0

您必須將結果進行轉換:'regex.matchesInString(text,options:0,range:NSMakeRange(0,countElements(text)))as NSTextCheckingResult []' – Jack

回答

7

嘗試這樣分配給您的results變量:?

var results = regex.matchesInString(text, options: nil, range: NSMakeRange(0, countElements(text))) as Array<NSTextCheckingResult>

  1. 返回類型爲Array<AnyObject>[]!,當您檢查集合的成員

  2. 斯威夫特選項

    採取nil代表一個空的選擇集,你可以投在這裏(如上面的例子)或更高版本(對比在Objective-C 0

+0

事實證明,答案的兩個部分都是必需的作爲解決方案的一部分..陣列,也是零的「0」選項是必需的。 Thx ....你得到我的投票權 – eharo2

+0

出於某種原因,我只能施加到NSTextCheckingResult。這很好,但是如何獲得結果數組中任何元素的文本值?操場只是將數組元素顯示爲[NSRegularExpressionCheckingResult,...] – crashprophet

0

我只是坐在與一些相關的正則表達式的一個問題,我想我會添加一個警告以上提交的答案。我的正則表達式匹配似乎被縮短,結果證明我提供的範圍不正確。我用@fqdn描述的方式生成範圍。事實證明,我的字符串包含回車符(\ u {A}),並且這些不是由countElements函數計算的。 我通過在字符串上調用.unicodeScalars來反駁這個問題,這似乎是糾正了長度。

println(countElements("\u{A}\u{A}\u{A}\n\u{D}\n\u{D}\n\u{D}\n\u{D}\n")) //8 
println(countElements("\u{A}\u{A}\u{A}\n\u{D}\n\u{D}\n\u{D}\n\u{D}\n".unicodeScalars)) //12 

聲明:這可能是一個很快的bug,可能會在更高版本中得到修復。