2009-06-09 54 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