所以我试图使用RegExKitLite从NSString中删除URL,我遇到了一个奇怪的问题。
NSLog(@"Array: %@", [message componentsMatchedByRegex:@"^(http://)[-a-zA-Z0-9+&@#/%?=~_()|!:,.;]*"]);
NSString *消息只是一些带有URL的文本。奇怪的是它不适用于它中的&符号。如果我把&符号拿出来它工作正常,但由于显而易见的原因我想保持&符号。我也是一个正则表达式newb,所以不要猛烈地搜索我的搜索表达式:)
之前有人在Objective-C中使用RegExKitLite或RegEx来体验过这个吗?
答案 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+\&@#/%?=~_()|!:,.;]*"]);