本来在 sed 里面写的,一不小心写多了,干脆拿出来单独一篇,可是又显得短哈。but Mike Gancarz 大佬在 《linux and the Unix Philosophy》里告诫我们:small is beautiful,make each program do one thing well.
------------------- 1. POSIX ERE 和 POSIX BRE 异同 --------------------
参考: (Classic shell scripting),又Google 到一个有用网址:
1. ERE 多出四个元字符: ?/+/|/(),()指分组,即允许多个字符作为一个单位,eg(why)+ 匹配一个
或多个重复的 why.
2. ERE 不存在后向引用,即BRE 里"\( \) \digit" 形式的子表达式和后向引用,digit从1到9.
3. 锚点(anchor)(不得不说这翻译真别扭),其实就是 ^ and $ 元字符,在ERE里,这两个永远是元字符,在中间位置出现依然有效:eg. ab^cd 正确,只是匹配不到东西而已。在BRE 中这样为错误。
4. 区间表达式,在BRE 为:\{ \},在ERE 为:{ }.
5. BRE 和 ERE 各自运算符优先级:
level ---- BRE --------------- ERE
-----------------------------------------------------------------
1--- [..] [==] [::] ---------- [..] [==] [::] // 方括号符号 eg. [:alpha:]
2--- \meta-character \meta-character
3--- [] ----------- [] // 方括号表达式 eg. [abc]ed
4--- \( \) \digit ----------- () // 子表达式(与后向引用)
5--- * \{ \} ----------- * + ? {} // 区间表达式
6--- 无符号 ----------- 无符号 // 连续字符
7--- ^ $ ----------- ^ $
8--- 无此level ----------- | // ERE 的交替运算符
-----------------------------------------------------------------
除 POSIX版外,GNU版本正则表达式有一些额外的运算符: \w || \W || \< || \> || \b || \B || \' || \` 等,用于替代 POSIX 版本的 [:alnum:]之类和提供其他的便捷操作。
---------------------------------------- end 1 ------------------------------------
阅读(946) | 评论(0) | 转发(0) |