正则表达式的字符编码与匹配模式详解
1. 字符编码基础
1.1 ASCII与ISO - 8859 - 1
ASCII编码仅为字节所能表示值的一半定义了字符。而ISO - 8859 - 1编码(通常称为“Latin - 1”)用带重音的字符和特殊符号填补了空白,使更多语言能够使用该编码。例如,在Latin - 1编码中,十进制值为234的字节被解释为ê,而在ASCII中该值是未定义的。
当我们希望程序按照特定编码处理一组字节时,关键问题在于程序是否真的能这样做。比如,有四个字节值分别为234、116、101和115,我们希望将其视为Latin - 1编码(代表法语单词“êtes”),那么正则表达式!ˆ\w+$”或!ˆ\b”能否匹配呢?这取决于程序的\w和\b是否将这些字节视为Latin - 1字符。
1.2 编码支持的丰富性
在处理特定编码时,需要考虑以下几个重要问题:
- 程序是否理解该编码?
- 程序如何识别数据采用了该编码?
- 正则表达式对该编码的支持程度如何?
编码支持的丰富性涉及以下几个重要方面:
- 多字节编码的字符是否能被正确识别?像点号(.)和[ˆx]这样的表达式是匹配单个字符还是单个字节?
- \w、\d、\s、\b等元字符是否能正确理解编码中的所有字符?例如,即使知道ê是一个字母,\w和\b是否会将其视为字母?
- 程序是否会扩展字符类范围的解释?例如,[a - z]是否能匹配ê?
- 大小写不敏感匹配是否适用于所有字符?例如,ê和Ê是否被视为相等?
有时候情况并非如表面那么简单。例如,Sun的java.
超级会员免费看
订阅专栏 解锁全文
870

被折叠的 条评论
为什么被折叠?



