正则表达式RE与扩展正则表达式ERE——grep与egrep
grep 正则表达式规则: ^ 行首定位符,表示从行首开始进行模式匹配 . 一个非换行符的字符 [ ] 匹配属于此集合的任意一个字符 [^ ] 匹配不属于此集合的任意一个字符 [a-z] (其指定的集合包含从a到z的所有小写字母,) \ 转义控制符,用来转义元字符或者转义普通字符 \(...\) 标记此模式为一个分组 \< 单词首位定位符,单词的定义为: [A-Za-z0-9_]+ \> 单词末尾定位符 x\{m\} 字符x重复匹配m次 x\{m,\} 字符x至少重复匹配m次,贪婪匹配原则 x\{m,n\} 字符x重复匹配m次至n次,贪婪匹配原则 * 等价于 \{0,\} \| 匹配条件或 $ 行尾定位符
练习:写一个正则表达式模式可用来匹配标准ipv4地址,形如0-255.0-255.0-255.0-255
解:
0-255可分解如下: 0-9 [0-9] 10-99 [1-9][0-9] 100-199 1[0-9]{2} 200-249 2[0-4][0-9] 250-255 25[0-5]
使用'或'合并得到:
\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)
整理,易得:
\<\(\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\.\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\.\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\.\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\)\>
运行结果:
egrep 扩展正则表达式规则: ^ 行首定位符,表示从行首开始进行模式匹配 . 一个非换行符的字符 [ ] 匹配属于此集合的任意一个字符 [^ ] 匹配不属于此集合的任意一个字符 [a-z] (其指定的集合包含从a到z的所有小写字母,) \ 转义控制符,用来转义元字符或者转义普通字符 (...) 标记此模式为一个分组 \< 单词首位定位符,单词的定义为: [A-Za-z0-9_]+ \> 单词末尾定位符 x{m} 字符x重复匹配m次 x{m,} 字符x至少重复匹配m次,贪婪匹配原则 x{m,n} 字符x重复匹配m次至n次,贪婪匹配原则 * 等价于 {0,} ? 等价于 {0,1} + 等价于 {1,} | 匹配条件或 $ 行尾定位符
由此易看出,扩展正则表达式与正则表达式之间的根本区别为,其增大了元字符的集合范围,增加的元字符有:
+ ? | { } ( )
这使得模式表现的更加简洁。
练习:写一个扩展正则表达式模式可用来匹配标准ipv4地址,形如0-255.0-255.0-255.0-255
解:
0-255可分解如下:
0-9 [0-9] 10-99 [1-9][0-9] 100-199 1[0-9]{2} 200-249 2[0-4][0-9] 250-255 25[0-5]
使用'或'合并得到:
([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
整理,易得:
\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\>
运行结果:
附录:
//grep options
-? 同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。 -b,--byte-offset 打印匹配行前面打印该行所在的块号码。 -c,--count 只打印匹配的行数,不显示匹配的内容。 -f File,--file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。 -h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀。 -i,--ignore-case 忽略大小写差别。 -q,--quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。 -l,--files-with-matches 打印匹配模板的文件清单。 -L,--files-without-match 打印不匹配模板的文件清单。 -n,--line-number 在匹配的行前面打印行号。 -s,--silent 不显示关于不存在或者无法读取文件的错误信息。 -v,--revert-match 反检索,只显示不匹配的行。 -w,--word-regexp 如果被\<和\>引用,就把表达式做为一个单词搜索。