连字符(-)用于指定一个字符范围。例如,所有大写英文字符的范围可以指定为:
[A-Z]
一个数字的范围可以指定为:
[0-9]
该字符类有助于解决匹配文章引用的问题。请看下面的正则表达式:
[cC]hapter [1-9]
它匹配字符串"chapter" 或"Chapter" 且其后面跟有空格,然后是从1到9的任意单个数字,下面的每一行都匹配这种模式:
you will find the information in chapter 9
and chapter 12.
Chapter 4 contains a summary at the end.
根据这个任务,本例中的第二行可以看做是假警报,可以在"[1-9]"之后添加空格来避免匹配两个数字。也可以指定不在那个位置匹配的字符类,正如我们在下一节要看到的那样。可以同时指定多重范围,也可以混合使用:
[0-9a-z?,.;:'"]
这个表达式将匹配“任意单个字符,可以是数字、小写字母、问号、逗号、句
点、分号、冒号、单引号和引号”。记住每个字符类都匹配单个字符。如果指
定多个类,可以描述多个连续的字符,例如:
[a-zA-Z][.?!]
这个表达式匹配“任意后面跟有句点、问号或感叹号的小写或大写字母”。
如果闭括号(])是作为类中的第一个字符出现(或者是脱字符后的第一个字符,参见下一节) ,那么它就被解释为类的一个成员。如果连字符在一个类中是第一个或最后一个字符,则失去其特殊含义。因此,为了匹配算术操作符,我们在下面的示例中将连字符(-)放在第一位:
[-+*/]
在awk中,还可以使用反斜杠转义在范围中出现的连字符或闭方括号,但是语法更杂乱了。
尝试用正则表达式匹配日期是一个有趣的问题。下面是两种可能的格式:
MM-DD-YY
MM/DD/YY
下面的正则表达式指示每个字符位置可能的数值范围:
[0-1][0-9][-/][0-3][0-9][-/][0-9][0-9]
"-"或"/"都可能是定界符。在第一个位置放置连字符确保它在字符类中解释为字面意义,即作为一个连字符,而不是指示一个范围。
原文链接:https://www.f2er.com/regex/360336.html