正则表达式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   如果被\<和\>引用,就把表达式做为一个单词搜索。

 

posted @ 2014-02-24 22:01  燕云  阅读(630)  评论(0编辑  收藏  举报