码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式的学习心得

时间:2014-09-10 12:42:51      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:正则表达式   grep   

1.  基本正则表达式支持的元字符

元字符描述用法举例
.匹配任意一个字符。a., x.y, x.., .ab.
[]匹配指定范围内的任意字符。[abc], [0-9], [a-z], [A-Z], [[:alpha:]], [[digit:]], [[:alnum:]], [[space:]], [[:upper:]], [[:lower:]], [[:punct:]]
[^]匹配指定范围以外的任意字符,即‘[]’的取反。[^0-9], [^[:space:]], [^[:punct:]]
*对其前的字符匹配任意次。ab*, .*, *ab, xy*z, [[:space:]]*ab, xy[^[:punct:]]*
?对其前的字符匹配0次或1次。使用时要用转义符,即’\?’ab?, [[:space:]]?ab, xy[^[:punct:]]?
{}对其前的字符匹配指定区间次。使用时要用转义符,即’\{\}’ab\{3\}, ab\{1,\}, ab\{0,3\}, ab\{1,5\}
()分组符。使用时要用转义符,即’\(\)’ab\(xyz\)*, \(abc\)like\(xyz\)
\num分组引用。严格意义上并非元字符,而是一种特定的转义。要和分组符联合使用才有意义。he \(love\)s his \1r
^行首锚定符^#.*,  ^Root
$行尾锚定符china$,  ^$
<词首锚定符。使用时要用转义符,即’\<’\<[[:digit:]],  \<Root
>词尾锚定符。使用时要用转义符,即’\>’\<root\>,   \<[[:alnum:]]*\>


2.  扩展正则表达式增加的元字符

元字符描述用法举例
+对其前的字符匹配至少1次。ab+,  ^#[[:space:]]+[^[:space:]]+
|组内多选一符。the selection is (yes|no),  user name is (root|hadoop|redhat|centos)

注: 在扩展正则表达式模式下,除了词首锚定符’<’和词尾锚定符’>’使用时要进行转义外,其它元字符都不需要做转义!

3.  grep和egrep命令常用的选项

-v     取反显示,即显示表达式不匹配的行。

-o    仅显示被匹配到的文本内容,而非整行的内容。

-i     匹配时不区分字符大小写。

-E    使用扩展的正则表达式模式。

-A num    同时显示匹配到的行的下面num行

-B num    同时显示匹配到的行的上面num行

-C num    同时显示匹配到的行的上面和下面各num行

--color=auto    对匹配到的文本内容用相应字体颜色显示。

-q        静默模式,即不输出任何内容,只关心匹配的执行结果,适合在shell脚本中使用。

-e expr       有多个正则表达式条件时,每个表达式前需用 -e 进行联合多个表达式条件。默认只有一个表达式条件时,-e 可以省略。

4.  正则表达式中关于引用的对应关系

正则表达式中使用’\1’,’\2’,’\3’… 引用前面对应的括号中的内容,遵循的原则是:左括号从左到右出现的次序。’\1’引用的内容是从左边开始,第1个左括号开始到其对应的右括号内内容;’\2’引用的内容是从左边开始,第2个左括号开始到其对应的右括号内内容;’\3’引用的内容是从左边开始,第3个左括号开始到其对应的右括号内内容;以此类推。因此,从括号的层次角度,是先引用外层括号内的内容,再引用内层括号内的内容。例:

info.text:

1 xyxyabababxyab

2 xyabxyab

3 xyabxyabxyab

4 xyxyxy

5 xyxyabababxyabxyxyababab

6 xyxyabababxyabxyxyabababxyabxyab

[zjp@localhost test]$ egrep --color=auto "((xy){2}(ab){3})(\2\3)*\1\4{2}" info.text

6 xyxyabababxyabxyxyabababxyabxyab

5.  在 [[ ]] 中支持的字符串模式匹配操作符’=~’

  • 不需要对模式匹配操作符右边的正则表达式加引号。

  • 支持的正则表达式是扩展的正则表达式模式。即对所有元字符都不需要进行转义。

  • 不支持词首锚定符’<’和词尾锚定符’>’。

lineStr=19934567

if [[ "$lineStr" =~ ([1-9][0-9]+|1[0-9][0-9]) ]] ; then
    echo "$lineStr"
fi


本文出自 “被褐怀玉徳善人间” 博客,请务必保留此出处http://deshanrenjian.blog.51cto.com/9324633/1550435

正则表达式的学习心得

标签:正则表达式   grep   

原文地址:http://deshanrenjian.blog.51cto.com/9324633/1550435

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!