返回介绍

6.4 匹配控制字符

发布于 2024-01-20 21:40:46 字数 2182 浏览 0 评论 0 收藏 0

如何匹配控制字符呢?虽然你很少会在文本中查找控制字符,但知道如何做也不是件坏事。在示例代码库中,你会找到ascii.txt文件(共128行),包含了所有的ASCII字符,一个字符占一行(所以有128行)。当你在该文件中查找时,若找到匹配项就返回一行。这个文件用来试试手挺不错的。

如果你使用grep或ack在ascii.txt中查找字符串或控制字符,这两个程序可能会将该文件当做二进制文件。如果是这样,在对其执行一个脚本时,若找到匹配程序就会报告“Binary file ascii.txt matches”(二进制文件匹配成功)。就这一点需要注意。

在正则表达式中,可以像这样来指定一个控制字符:

\cx

其中x就是你想匹配的控制字符。

例如,要在一个文件中查找空字符,可以使用以下Perl命令:

perl -n -e 'print if \c@' ascii.txt

如果系统中已经安装了Perl且运行正常,就可以得到以下结果:

0. Null

原因是该行有一个空字符,只是结果中看不到这个字符。

如果你用vim之外的编辑器打开ascii.txt文件,编辑器就有可能将控制字符从文件中删除,所以最好还是使用vim编辑器。

还可以用\0来查找空字符。试一下这个命令:

perl -n -e 'print if ' ascii.txt

再用以下命令来查找报警字符(BEL):

perl -n -e 'print if \cG' ascii.txt

这将返回:

7. Bell

或者还可以使用简写式:

perl -n -e 'print if ' ascii.txt

要查找转义字符,则使用:

perl -n -e 'print if \c[' ascii.txt

它的结果是:

27. Escape

或者使用简写式:

perl -n -e 'print if \e' ascii.txt

如何匹配退格符呢?试一下这个:

perl -n -e 'print if \cH' ascii.txt

它显示:

8. Backspace

也可以使用分类表达式来查找退格符:

perl -n -e 'print if []' ascii.txt

如果没有括号,\b会被认为是什么呢?是第2章中所学到的单词边界。括号改变了正则表达式处理器对\b的理解方式。在本例中,Perl将其看做一个退格符。

表6-3 列出了本章中匹配字符的方法

表6-3 匹配Unicode及其他字符

代码

描述

\uxxxx

Unicode(四位)

\xxx

Unicode(两位)

\x{xxxx }

Unicode(四位)

\x{xx }

Unicode(两位)

\ooo

八进制(基数为8)

\cx

控制字符

\0

空字符

\a

报警符

\e

转义符

[\b]

退格符

该表总结了本章的内容。下一章我们详细学习量词。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文