Objective-C正则匹配空格时触发U_REGEX_INVALID_RANGE错误排查
正则表达式范围无效错误的原因与解决办法
嘿,这个问题我太熟了!你遇到的U_REGEX_INVALID_RANGE错误,根源出在正则字符组里的那个-符号上。
在正则的方括号[]字符组中,-是个特殊角色:当它夹在两个字符中间时,会被当作范围运算符(比如A-Z就表示从大写A到大写Z的所有字母)。你写的正则[A-Za-z_.- ]里,.-这部分被正则引擎解析成了“从.到空格”的字符范围,但ASCII编码里,.的码值是46,空格的码值是32——范围是从大到小的,这在正则规则里是不被允许的,所以直接触发了“无效范围”的错误。
解决办法有两种,选哪种都可以:
- 把
-移到字符组的开头或者结尾,让它脱离“夹在两个字符中间”的位置,这样就会被当作普通连字符处理。比如:[A-Za-z_. -]{2,39} // 把-放在空格前 // 或者 [-A-Za-z_. ]{2,39} // 把-放在最开头 - 给
-加反斜杠转义,明确告诉正则引擎这就是一个普通字符,不是范围运算符:[A-Za-z_\-. ]{2,39}
修正之后,再去匹配“John Smith”这类带空格的全名就不会报错啦。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

