我希望从字符串的开头和结尾删除空格。我使用以下正则表达式。
NSString *pattern = @"(?:^\s+|\s+$)";
这会出现\s
不是有效转义字符的错误。用\\s
替换它似乎有用,但我想知道的是为什么?我认为\s
是一个空白字符,\\s
会给我一个字符串' \ s'?
答案 0 :(得分:4)
\s
(不是/s
)是空格字符的正则表达式转义。
但是在NSString
文字(和C字符串文字)中,您需要使用反斜杠转义反斜杠,以防止反斜杠被用作字符转义序列。
这就是您\\s
中需要NSString
的原因。否则编译器会认为您正在尝试使用不是有效C / Objective-C转义字符的转义字符\s
(有效示例为\n
,\t
等)。
答案 1 :(得分:1)
你是正确的认为\s
是正则表达式中的空格序列,但是你必须考虑你正在编写这个正则表达式的上下文。
你正在字符串中写一个正则表达式,这意味着你需要转义某些字符,例如\
,否则你可以写\n
,它实际上会被解释为换行符。将字符串@"{\n}"
解释为:
"{
}"
总结一下,你只需要转义\
,这样它就不会试图逃避s
(\s
在字符串的上下文中没有任何意义正如xcode正确报告给你)。
tl; dr在字符串中转义\
,以便在正则表达式中正确解释它们。