RegExKitLite和&符号的问题

时间:2009-06-09 21:24:10

标签: iphone objective-c regex

所以我试图使用RegExKitLite从NSString中删除URL,我遇到了一个奇怪的问题。

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

NSString *消息只是一些带有URL的文本。奇怪的是它不适用于它中的&符号。如果我把&符号拿出来它工作正常,但由于显而易见的原因我想保持&符号。我也是一个正则表达式newb,所以不要猛烈地搜索我的搜索表达式:)

之前有人在Objective-C中使用RegExKitLite或RegEx来体验过这个吗?

2 个答案:

答案 0 :(得分:4)

在ICU正则表达式字符类中,&意味着交集。例如@“[[:letter:]& [a-z]]”。所以需要引用彼得的建议,用反斜杠,即\&在正则表达式中。但是,\在C字符串中有特殊含义,包括Objective C字符串。所以\必须引用它。所以你需要\&在你的模式中。即,[-a-zA-Z0-9 + \& @#/%?=〜_()|!:,.;]

另外,我不确定你在URL开头的意图是什么。如果您希望正则表达式匹配字符串中的任何位置,则应使用\ b(分词)。如果您希望它匹配仅在消息开头的URL,那么您只能获得写入的单个匹配。如果您希望它匹配行开头的URL,则在正则表达式的开头添加(?m)以打开^的多行匹配(并考虑将$添加到正则表达式的末尾)。

答案 1 :(得分:0)

我没有使用过RegExKitLite的经验,并且从未在角色类中遇到过&特殊问题,但是尝试在它前面放一个\来查看它是否有效?

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