[ ] 字符组(Character Classes)
来源:互联网 发布:炉石传说有没有mac版 编辑:程序博客网 时间:2024/05/14 20:56
[ ] 字符组(Character Classes)
[]能够匹配所包含的一系列字符中的任意一个。需要注意的是,[]虽然能匹配其中的任意一个字符,但匹配的结果只能是一个字符,不是多个。
例如[abc]表示字符“a”或“b”或“c”。
[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,即使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。
例如[a-z]表示任意一个小写字母。而在程序中使用[z-a]则会报“[x-y] 范围的顺序颠倒”这样的异常。
大部分在正则中有特殊意义、在匹配其本身时需转义的字符,在[]内是不需要转义的。必须转义的只有“/”、“[”和“]”,而“^”出现在[]开始位置,“-”前后构成范围区间时,需要转义,出现在其它位置不需要转义,例如[/^.$^{/[(|)*+?-//]
在.NET中,不构成歧义的情况下,“[”和“]”可以不用转义,程序也可以得到预期结果,但是这种写法可读性较差,而且出现错误时不易排查,因此不推荐这种写法
举例:Regex reg = new Regex("[^]]+"); //不推荐
.NET的字符组中支持集合减法,语法[set1-[set2]],例如[a-z-[aeiou]]表示除元音外的小写字母。但是除非你很了解这种语法的支持范围,以及确实有必要这样做,否则不要轻易使用这种可读性较差的语法。事实上完全可以用多个范围区间[b-df-hj-np-tv-z],在区间较多,导致可读性差、容易出错的情况下,可以使用正向预搜索来实现以上需求,(?![aeiou])[a-z],这种语法规则,支持范围要大得多,可读性也要好一些。
常见错误用法:
因为[]本身表示的就是字符之间“或”的关系,因此在[]中使用“|”来表示“或”的关系是错误的。
举例:[a|b|c]表示的是“a”或“b”或“c”或“|”中的任意一个字符。
[^ ] 排除型字符组
[^ ]表示匹配任意一个未列举的字符,同样的,匹配的结果也只能是一个字符。
例如[^abc]表示除字符“a”、“b”、“c”外的任意一个字符。
[^ ]也支持字符分组,例如[^0-9]表示除数字外的任意一个字符。
新手最容易犯的错误就是,用[^abc]或[^(abc)]这样的表达式来匹配不包含“abc”子字符串的字符串
还有一点并不常见,/b在字符组外表示单词边界,但是在字符组内[/b]表示退格符
- [ ] 字符组(Character Classes)
- [ ] 字符组(Character Classes)
- [ ] 字符组(Character Classes)
- Regular Expressions:Character Classes or Character Sets
- Perl Learning: 7.3. Character Classes
- 正则表达式学习指南(五)----Character Classes
- Swift 字符(Character)
- 正则表达式学习指南(二十二)----XML Character Classes
- HTML字符实体(Character Entities)
- 转义字符(Escape character)
- java 字符类(Character)
- java 字符类(Character)
- Mysql character字符编码设置
- Character 方法字符的操作
- 编译错误:非法字符Invalid Character
- Character类中字符类型归类
- 字符产生器协议(Character Generator Protocol)
- 最常用的字符实体(Character Entities)
- 几段C#代码
- 2 循环结构
- 问题解决:Tomcat 部署 Could not copy all resources to 或者Undeployment Failure could not be redeployed
- 对于《Bruno》的片尾曲《Dove of Peace》的一些看法
- [shell日记]read
- [ ] 字符组(Character Classes)
- 人生成功路上的二十五句格言
- 工作总结2 第三方库注意的问题
- 正则基础之——捕获组(capture group)
- 2009-12-26
- 正则表达式学习参考
- 【转】文档类、子框架类及视图类的关系及如何相互调用
- 利用泛型实现通用的数据实体类填充
- Mysql配置文件:my.ini详解