2012-04-23 73 views
1

下面是代码NSRegularExpression给予警告

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)" options:NSRegularExpressionCaseInsensitive error:&error]; 

工作本身的代码,但给出了这样的警告:

"Unknown escape sequence \." 

我也尝试过的选项:

NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines 

但仍错误仍然存在。任何人都可以解释为什么会出现这个错误以及如何删除它。

+0

请参阅http://stackoverflow.com/questions/6812206/unknown-escape-sequence-regular-expression – 2012-04-23 10:27:29

回答

5

如果你写你的正则表达式作为字符串文字,它包含反斜杠,你必须使用第二反斜线逃避他们,因为反斜杠也被用于在字符串字面转义一些特殊字符(如\n\t等) 。

所以,如果你想要你的正则表达式包含\.,你必须写它作为\\.。同样,这只适用于使用字符串文字的情况,而不是如果您要从文件加载正则表达式。

如果您确实想要没有反斜杠的时间段(实际上您现在有这个时间段),请删除反斜杠以消除警告。

+0

谢谢。但是这是否改变了功能? – 2012-04-23 10:38:29

+1

是的,它使得这个点在正则表达式中成为一个字面点,而不是正则表达式语法的一部分。我猜想这就是应该如何使用正则表达式。否则,您必须删除反斜杠才能在没有警告的情况下获得相同的行为。 – omz 2012-04-23 10:48:10

+0

@omz:我认为这不会改变这种情况下的含义。警告看起来像来自字符串处理器,而不是正则表达式引擎。这意味着它被隐含地翻译成'\\。'。但它仍然是一个有用的警告,因为如果它们没有正确转义,其他一些转义序列(如\ b)(退格与字边界)会改变它们的含义。 – 2012-04-23 11:07:45