`
marb
  • 浏览: 422357 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则基础之 [ ] 字符组(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”或“|”中的任意一个字符。

 

举例

       源字符串:ab|ac

       正则表达式:[a|b|c]+

       匹配结果:ab|ac

 

 

[^ ] 排除型字符组

 

    [^ ]表示匹配任意一个未列举的字符,同样的,匹配的结果也只能是一个字符。

    例如[^abc]表示除字符“a”、“b”、“c”外的任意一个字符。

    [^ ]也支持字符分组,例如[^0-9]表示除数字外的任意一个字符。

 

    新手最容易犯的错误就是,用[^abc][^(abc)]这样的表达式来匹配不包含“abc”子字符串的字符串。    

举例

       源字符串:string yourStr = "<aaa>bbb<abc>ccc<ddd>";

       规则描述:取出yourStr中格式为<...>,但<>中不是abc的内容

       预期结果:<aaa><ddd>

       错误写法:<[^abc]*>

       正确写法:<(?!abc>)[^>]*>

     

还有一点并不常见,\b在字符组外表示单词边界,但是在字符组内[\b]表示退格符。

分享到:
评论

相关推荐

    正则表达式——字符组(Character Classes) [ ].rar

    在正则表达式中,字符组(Character Classes)是一个重要的概念,它允许我们定义一组字符,匹配其中任何一个字符。字符组通常用方括号 `[]` 表示,它可以极大地提高我们的匹配灵活性。 ### 一、基本字符组 1. **...

    Js正则表达式匹配字符

    - **预定义字符类(Character Classes)**:如 `\d`(数字),`\w`(字母数字字符),`\s`(空白字符)等。 3. **量词(Quantifiers)** - `*`:零个或多个前面的字符。 - `+`:一个或多个前面的字符。 - `?`:...

    正则表达式之道-ppt

    - 字符类(Character Classes):例如`.`, `\w`, `\s`,用于指定一组要匹配的字符。 - 转义符:如`\t`, `\r`,用于匹配特定的控制字符。 - 限定符(Quantifiers):如`*`, `+`, `{n}`, 控制匹配的数量。 - 分组构造...

    文本处理工具三剑客之---grep (正则表达式引擎,正则表达式元字符).md

    - **字符类(Character Classes)**:如`[abc]`(匹配"a"、"b"或"c"中的任意一个字符)。 - **量词(Quantifiers)**:用于指定前面的字符或组重复的次数,例如`{n}`(精确重复n次)。 **分类:** - **基本正则...

    精通正则表达式-Jeffery E.F.Fridel著

    以上只是正则表达式基础知识的一部分,实际上,正则表达式还有更多高级特性,如递归、条件表达式等,这些都需要通过实践和学习才能完全掌握。《精通正则表达式》这本书深入细致地讲解了这些内容,对于想深入了解正则...

    正则表达式 基础 pdf 教程

    字符类(Character Classes) 字符类是正则表达式中的一种特殊用法,用来匹配一系列字符中的任意一个。例如: - `[abc]`:匹配"a"、"b"或"c"。 - `[a-z]`:匹配任何小写字母。 - `[^a-zA-Z]`:匹配任何非字母字符。...

    splunk 正则表达式的使用

    #### 字符类(Character Classes) 字符类是一组字符的集合,用于匹配符合某些标准的字符。以下是一些常用字符类及其说明: 1. **`.`**:匹配任何字符(除了换行符`\n`)。如果由单行模式修改,则`.`字符会匹配任何...

    delphi正则表达式解析器

    7. **预定义字符类(Predefined Character Classes)**:如\d表示数字,\w表示字母数字,\s表示空白字符,这些特殊字符可以简化正则表达式编写。 8. **量词(Quantifiers)**:如*、+、?和{n,m}用于指定某个模式...

    正则表达式检查小工具

    1. **字符集(Character Set)**:通过方括号`[]`定义一组字符,如`[abc]`匹配任意一个'a'、'b'或'c'。 2. **量词(Quantifiers)**:用来指定前面的元素出现的次数,例如`*`表示零次或多次,`+`表示一次或多次,`?...

    15分钟精通正则表达式

    5. **字符集(Character Classes)**:用于匹配字符集中任意一个字符。 - `[...]`:表示一个字符集合。 - 示例: - `"[ab]"`:匹配“a”或“b”。 - `"[a-d]"`:匹配“a”到“d”之间的任何单个字符。 - `"[a-...

    正则表达式常用符号精简说明

    Character Classes** - 字符类可以嵌套在其他字符类中,并且可以通过并集操作符(隐式)和交集操作符`&&`组合。 **例子**: - `[a-z]`:匹配小写字母。 - `[a-zA-Z]`:匹配所有字母。 - `[aeiou&&...

    java 正则表达式

    2. **预定义字符类(Predefined Character Classes)**:例如`\w`等同于[a-zA-Z0-9_],表示单词字符;`\W`是其反义,非单词字符。 3. **分组与引用(Groups and Backreferences)**:使用`( )`来创建分组,可以捕获...

    Java正则表达式的使用

    2. **正则表达式的字符类(Character Classes)** - `[abc]`:匹配字符a、b或c中的任意一个。 - `[^abc]`:匹配除a、b、c以外的任意字符。 - `[a-z]`:匹配所有小写字母。 - `[A-Z]`:匹配所有大写字母。 - `[0...

    正则表达式入门正则表达式 学习参考 推荐

    组(Character Classes)用于匹配方括号内的任意单个字符。例如: - `[abc]` 表示 "a" 或 "b" 或 "c"。 - `[0-9]` 等价于 `[0123456789]`,表示 0~9 之间的任意数字。 - `[\u4e00-\u9fa5]` 表示任意一个汉字。 - `...

    正则表达式.rar

    8. **预定义字符类(Predefined Character Classes)**:`\d`(数字)、`\D`(非数字)、`\w`(字母数字下划线)、`\W`(非字母数字下划线)、`\s`(空白字符)、`\S`(非空白字符)。 9. **转义字符(Escape ...

    php正则表达式.doc

    1. 字符类(Character Classes):使用方括号`[]`定义一组可以出现的字符。例如,`\d`代表数字,`\w`代表字母数字字符,`\s`代表空白字符。自定义字符集如`[abc]`匹配"a"、"b"或"c"。 2. 选择性集合(Alternation)...

    正则表达式30分钟入门教程

    3. **字符类(Character Classes)**:使用方括号`[]`定义一组字符,匹配其中的任意一个。例如,`[abc]`匹配'a'、'b'或'c'。 4. **分组与捕获(Grouping and Capturing)**:使用圆括号`()`将表达式分组,允许我们...

Global site tag (gtag.js) - Google Analytics