6.4 匹配控制字符
如何匹配控制字符呢?虽然你很少会在文本中查找控制字符,但知道如何做也不是件坏事。在示例代码库中,你会找到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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论