我正在尝试使用@RequestMapping(value = "/placeByZip", method = RequestMethod.GET)
public Place getPlaceByZipcode(@RequestParam(value="zipcode") String zipcode) {
Place place = placeService.placeByZip(zipcode);
return place;
}
和正则表达式验证电话号码。唯一的问题是当设置正则表达式Swift认为我试图逃避它的一部分由于反斜杠。我怎么能绕过这个?
我的代码如下:
NSPredicate
答案 0 :(得分:5)
在Swift中,你仍然需要双重转义字符串文字中的斜杠来定义 literal 反斜杠:
let phoneRegEx = "^((\\(?0\\d{4}\\)?\\s?\\d{3}\\s?\\d{3})|(\\(?0\\d{3}\\)?\\s?\\d{3}\\s?\\d{4})|(\\(?0\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}))(\\s?\\#(\\d{4}|\\d{3}))?$"
请参阅ICU Regular Expressions页面上的正则表达式元字符表,了解应该以这种方式转义正则表达式转义符。
请注意您可以在Special Characters in String Literals检查的正则表达式转义(在上表中)和字符串文字转义序列之间的区别:
字符串文字可以包含以下特殊字符:
- 转义的特殊字符
\0
(空字符),\\
(反斜杠),\t
(水平标签),\n
(换行),{{1} }(回车),\r
(双引号)和\"
(单引号)- 任意Unicode标量值,写为
\'
,其中\u{n}
是1-8位十六进制数(Unicode,将在下面的Unicode中讨论)
因此,n
是一个"\""
字符串,写成字符串文字,你不必为正则表达式引擎转义双引号,所以"
字符串文字正则表达式模式足以匹配字符串中的"\""
字符。但是,"
,一个字符串文字重复"\\\""
文字字符串也将匹配\"
字符,尽管您已经可以看到这个正则表达式模式多么冗余。此外,"
(LF符号)与"\n"
的新行相同,因为"\\n"
是换行符字符的文字表示,"\n"
是正则表达式ICU正则表达式转义表中定义的转义。