我正在用 Objective-C 编写正则表达式。
转义序列\w
是非法的并发出警告,因此正则表达式/\w/
必须写成@"\\w"
;转义序列\?
is 显然,有效, http://cupsofcocoa.com/2010/09/14/escape-sequences/并且不会发出警告,因此正则表达式/\?/
必须写成@"\\?"
(即必须转义反斜杠)。
问号并不像\t
or \n
,那么为什么是\?
有效的转义序列?
Edit:澄清一下,我不是在问量词,而是在问字符串转义序列。也就是说,这不会发出警告:
NSString *valid = @"\?";
相比之下,这does发出警告(“未知转义序列 '\w'”):
NSString *invalid = @"\w";
它指定一个字面问号。需要它是因为一个鲜为人知的功能,称为三字母组 http://en.wikipedia.org/wiki/Digraphs_and_trigraphs,您可以在其中编写以问号开头的三字符序列来替换另一个字符。如果您启用了三字母,为了写“??”在字符串中,您需要将其写为"?\?"
为了防止预处理器尝试将其读取为三字母组的开头。
(如果您想知道“为什么有人会引入这样的功能?”:某些键盘或字符集不包含常用符号,例如{
。所以他们引入了三字母组,这样你就可以写??<
反而。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)