2009-06-09 97 views
0

所以我試圖用RegExKitLite翻譯NSString的URL,並且遇到了一個奇怪的問題。RegExKitLite和&符號的問題

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+&@#/%?=~_()|!:,.;]*"]); 

NSString *消息只是一些帶有URL的文本。奇怪的是它不適用於它的&符號。如果我把&符號出來,它工作正常,但出於顯而易見的原因,我想保持&符號。我也是一個正則表達式newb,所以不要打我的搜索表達式太多:)

任何人都體驗過此之前在Objective-C中通常使用RegExKitLite或RegEx?

回答

4

在ICU正則表達式字符類中,&表示交集。例如@「[[:letter:] & [a-z]]」。所以需要引用Peter的建議,在正則表達式中使用反斜槓,即\ &。但是,\ C在C字符串中有特殊含義,包括Objective C字符串。所以\本身必須引用。所以你需要在你的模式中使用\ &。即,[-a-zA-Z0-9 + \ & @#/%?=〜_()|!:,。;]

另外,我不確定你的意圖是在^網址的開始。如果您希望正則表達式匹配字符串中的任何位置,則應該使用\ b(分詞符)。如果您希望它匹配僅位於郵件開頭的URL,那麼您只會獲得一次寫入的匹配。如果您希望它匹配行首的URL,則在正則表達式的開始處添加(?m)以打開^的多行匹配(並考慮在正則表達式的末尾添加$)。

+0

太好了!我沒有意識到我需要逃避逃跑(「\\&」)。感謝你的幫助,並且也一樣。就像我說過的,我是一個正則表達式的新手,所以我不知道自己在做什麼。感謝您的提示。 – Meroon 2009-06-10 15:10:55

0

我對RegExKitLite沒有任何經驗,並且從未遇到過&作爲角色類中的特殊內容,但請試着在其之前放置一個\以查看它是否有效?

NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+\&@#/%?=~_()|!:,.;]*"]); 
+0

不,我之前嘗試過,它仍然無法正常工作。 Plus xcode會拋出一個警告,說這是一個未知的轉義序列。 – Meroon 2009-06-10 00:31:50