忽略逃脱双引号字符迅速

时间:2015-05-15 12:52:29

标签: regex swift escaping nspredicate nsregularexpression

我正在尝试使用@RequestMapping(value = "/placeByZip", method = RequestMethod.GET) public Place getPlaceByZipcode(@RequestParam(value="zipcode") String zipcode) { Place place = placeService.placeByZip(zipcode); return place; } 和正则表达式验证电话号码。唯一的问题是当设置正则表达式Swift认为我试图逃避它的一部分由于反斜杠。我怎么能绕过这个?

我的代码如下:

NSPredicate

1 个答案:

答案 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正则表达式转义表中定义的转义。