【问题标题】:Double \\ in regular expression iOS正则表达式iOS中的双\\
【发布时间】:2015-06-11 06:39:23
【问题描述】:
有人明白(([A-Za-z\\s])+)\\? 的含义吗?
我想知道为什么它应该是"\\s"和"\\"?
如果我输入"\s",Xcode 就是不理解,如果我输入"\?",它就是与"?" 不匹配。
我用谷歌搜索了很多,但我没有找到解决方案。有谁知道吗?
【问题讨论】:
标签:
ios
regex
nsregularexpression
【解决方案1】:
实际的正则表达式是(([A-Za-z\s])+)\?。这匹配一个或多个字母和空格字符,后跟一个问号。 \ 在这里有两种不同的含义。首先,\s 具有固定含义,代表任何空白字符。在第二种情况下,\? 表示文字问号字符。转义是必要的,因为问号表示前面的一个或没有。
但是,您不能在 C 代码中的字符串文字中键入这样的正则表达式。 C 还使用反斜杠字符进行一些转义。例如,"\n" 被转换为仅包含换行符的字符串。还有一些其他具有特殊含义的转义序列。如果反斜杠后面的字符没有特殊含义,则反斜杠将被删除。这意味着如果你想在你的字符串中有一个退格,你必须写两个。
因此,如果您根据需要编写正则表达式字符串,您会得到不同的结果,因为它将被解释为具有完全不同含义的 (([A-Za-zs])+)?。因此,当您在 ObjC(或任何其他基于 C 的语言)字符串文字中编写正则表达式时,您必须将所有反斜杠字符加倍。
【解决方案2】:
不确定 ios 但同样的事情发生在 java 中。 \ 是 java 的转义字符,c 也是,所以当你键入 \s java 时,会将 \ 读作转义字符。
把它想象成你想打印一个\ 你需要做什么。
您必须输入\\。现在第一个 \ 将用作 java 的转义字符,第二个将被打印出来。
我认为ios也应该是同样的概念。
所以如果你想要\s,你输入\s,如果你想要\,你输入\\。