您的位置:首页 > 其它

正则表达式的学习心得

2014-09-10 10:39 176 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 grep