怎样记住unix复杂的正则表达式转义符号情形


在unix和vim方面,文本处理能力最强的手段就是正则表达式了,但是这也恰恰是比较难记忆的。最痛苦的莫过于复杂的表达式,丑陋的字符转义。

下面就讨论如何记忆字符转义的情形。
首先字符转义无非就分两种:
1:将普通字符转义为屏幕上无法表示的特殊字符,典型的就是c语言中的转义。\n,\r,\b之类。
2:将具有特殊意义的字符转换为原本普通的意义。比如正则表达式中的 . * ( ) [
]  之类的。

当一个字符在哪种情况下使用的多,那么它单独出现时就表示那种使用的多的意义,而不常用的意义需要表达时,则通过转义来实现。比如正则表达式中,“."和”*“,还有其它的所有特殊字符,特殊意义都是常用的,那么通常情况下单独出现时,就取它的特殊意义。而当需要使用 * 的字面意义时,就用\*来表示。

这样的话
1:正则表达式中有两种字符,一种就是普通的,一种就是特殊的。当他们没有被转义时普通的就表示普通的,特殊的就是特殊的。
2:我们现在只需要记住特殊的字符什么时候会被转义为原本的字面意义。
3:当使用转义符号"\"时,特殊字符无疑会被转义为原本的意义。
4:有些特殊字符是位置相关的,比如^,$,-。"^"位于行首时就是特殊的,不是行首时就是字面意义的。"$"位于行尾时,就是特殊的,当位于非行尾时就是字面意义的。当"-"位于[]中时,比如[a-z],这时候就是特殊的,当不位于[]中时,就是普通的。
任何特殊符号在[]中都是字面意义的,不需要被转义,但是\,-,]除外,这三种在[]中表示字面意义时,需要转义。




这里有个需要注意的地方:grep 的历史上,刚发展出来时,只提供了基本的元字符,比如"*",".","[","]","*"等运算符,后来因为不能满足某些人的需求,这些人自己对元字符做了扩展,增强了正则表达式的能力,这也就是egrep了——而扩展的元字符分别有“(",")","?","+"等。

所以后来grep 为了支持这些扩展的元字符,又保持与自己历史版本的兼容,所以在grep中可以使用“\"后面跟扩展扩展元字符表示元字符的意义。

而在egrep中扩展的元字符本身就是元字符意义,而如果使用扩展的元字符的字面意义,则需要使用转义符号”\"。

从grep 和 egrep对于扩展的元字符的不同解释中,也可以看出转义符作用:要不就是字面转特殊,要不就是特殊转字面!!!

但是egrep 中这种统一的风格更让人容易接受,元字符就是元字符,元字符转义才是字面意义。不像grep中有些字符是元字符,有些字符则代表字面意义(需要转义才行)。


可能grep 也觉得自己这样子不好,所以提供了-E选项,这样的话,grep -E 和 egrep 的行为模式就基本想通了。我一般用grep -E 和 egrep的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值