正则表达式,未知逃脱序列' \ s'

时间:2015-08-12 16:21:33

标签: ios objective-c regex

我希望从字符串的开头和结尾删除空格。我使用以下正则表达式。

NSString *pattern = @"(?:^\s+|\s+$)";

这会出现\s不是有效转义字符的错误。用\\s替换它似乎有用,但我想知道的是为什么?我认为\s是一个空白字符,\\s会给我一个字符串' \ s'?

2 个答案:

答案 0 :(得分:4)

\s(不是/s)是空格字符的正则表达式转义。

但是在NSString文字(和C字符串文字)中,您需要使用反斜杠转义反斜杠,以防止反斜杠被用作字符转义序列。

这就是您\\s中需要NSString的原因。否则编译器会认为您正在尝试使用不是有效C / Objective-C转义字符的转义字符\s(有效示例为\n\t等)。

答案 1 :(得分:1)

你是正确的认为\s是正则表达式中的空格序列,但是你必须考虑你正在编写这个正则表达式的上下文。

你正在字符串中写一个正则表达式,这意味着你需要转义某些字符,例如\,否则你可以写\n,它实际上会被解释为换行符。将字符串@"{\n}"解释为:

的示例
"{
}"

总结一下,你只需要转义\,这样它就不会试图逃避s\s在字符串的上下文中没有任何意义正如xcode正确报告给你)。

tl; dr在字符串中转义\,以便在正则表达式中正确解释它们。

Another answer that talks about escape sequences