【问题标题】:Double \\ in regular expression iOS正则表达式iOS中的双\\
【发布时间】:2015-06-11 06:39:23
【问题描述】:

有人明白(([A-Za-z\\s])+)\\? 的含义吗?
我想知道为什么它应该是"\\s""\\"

如果我输入"\s",Xcode 就是不理解,如果我输入"\?",它就是与"?" 不匹配。

我用谷歌搜索了很多,但我没有找到解决方案。有谁知道吗?

【问题讨论】:

  • 对不起是 (([A-Za-z\\s])+)\\?

标签: 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,如果你想要\,你输入\\。

【讨论】:

  • 感谢您的回答
【解决方案3】:

\s 元字符用于查找空白字符。

Refer this!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多