4.8. 字符介绍——字符类

未匹配的标注

4.8 字符介绍——字符类

字符类是通配符概念的改进。不是在一个特定的位置匹配任意字符,而是我们列出将要被匹配的字符。方括号[] 元字符([])包裹字符列表,它们中的任何一个都可以占用一个单独的位置。

字符类对处理大写和小写字符字母是有用的。比如,如果 “what” 可能是以大写字母 “W” 开头或者小写字母 “w” 开头,你可以指定:

[Ww]hat

这个正则表达式能够匹配 “what” 和大写的 “What”。它将匹配包含这个四字符字符串的任意行,它的第一个字符可以是大写的 W 或小写的 w。因此,它可以匹配 “Whatever” 或者 “somewhat”。

如果一个文件包含结构化的标题宏,比如 .H1,.H2,H3,等等,你可以用下面这个正则表达式来提取出这些行:

\.H[12345]

这个模式匹配一个三字符的字符串,最后一个字符是从 1 到 5 的任意数字。

同样的语法也用于 UNIX shell。因此你可以使用字符类在 UNIX 命令中指定文件名。比如,从一组章节文件中提取标题,你可以键入:

$ grep ’\.H[123]’ ch0[12]
ch01:.H1 "Contents of Distribution Tape"
ch01:.H1 "Installing the Software"
ch01:.H1 "Configuring the System"
ch01:.H2 "Specifying Input Devices"
ch01:.H3 "Using the Touch Screen"
ch01:.H3 "Using the Mouse"
ch01:.H2 "Specifying Printers"
ch02:.H1 "Getting Started"
ch02:.H2 "A Quick Tour"
.
.

注意,你必须将模式用引号括起来,这样的话它就会传递给 grep 而不会被 shell 解释。被 grep 产生的输出会在每一行打印出文件名。

注意,源码中并没有这些文件,因此这个例子仅仅是拷贝的,并未实际运行。

在字符类的另一个例子中,假设你想指定结束一个句子的不同的标点符号:

.[!?;:,".]□□. 

这个表达式匹配了“任意一个字符,接着一个叹号或 ? 或分号或冒号或,或双引号或句号,然后再跟着两个空格,再跟着任意字符”。当这发生在一行上的时候,它可以被用来寻找一个句子后面有两个空格,再接着下一个句子的开头。注意这个表达式中有三个点,第一个和最后一个点是通配符元字符,但第二个点是按字面意思解释的,在方括号[] 里面,标准元字符失去它们原来的意思。因此在方括号[] 里面的点只是一个句号。表 3-2 列出了在方括号[] 里面有特殊意义的字符。

表 3-2 在字符类里面的特殊字符

字符 作用
\ 转义任意特殊字符(仅适用于 awk)
- 当它不是在第一个或最后一个位置的时候,指定一个范围。
^ 仅当它在第一个位置的时候,指示反向匹配。

反斜杠仅仅在 awk 中是特殊字符,使得为一个将匹配一个 a,一个右方括号,或一个1的字符类写正则表达式为 “[a\]1”成为可能。

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

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


暂无话题~