4.9. 字符介绍——字符类——字符范围

未匹配的标注

4.9 字符介绍——字符类——字符范围

连字符(-)允许你指定字符范围。比如,所有大写英文字母的范围[^1],可以如下:

[A-Z]

1: 这种表示法在非ASCII字符集和/或除了英语的语言中实际上是非常混乱的。POSIX 标准解决了这个问题;下面会介绍新的 POSIX 特性。

个位数字的范围可指定如下:

[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.

取决于任务,这个例子中的第二行可能被认为是一个false alarm。你可以在 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]

连接符和斜杠可以是分割符。将连接符放在第一个位置,确保它在一个字符类里面按字面意思解释,作为一个连字符,而不是指定一个范围[^2]。

2: 注意,这个表达式匹配了那些混合分隔符号的日期,还匹配了一些不可能的日期如“15/32/78”。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~