正则表达式对于初学者来说有很大难度,简单的说一下它的概念,正则表达式就是符合某些复杂规则的字符串,记录文本规则的代码,我把自己做的一个概述笔记发布出来,以供大家分享.如题只是一个快捷的学习,深度不敢期求达到,只是起到一个抛砖引玉的作用.
1.^ $
"^a" 以a开头
"b$" 以b结尾
"^abc%" 以abc开头,以abc结尾的字符串
^$就表示是空行,中间什么都没有.
2.
"abc" 匹配包含abc的字符串
3.* + ?
这三个字符只管它前面的一个字符
* 前面的字符0个1个或者多个
+ 前面的字符1个或者多个,至少1个
? 前面的字符0个或者1个
"ab*" 匹配以a开头,以0个b;1个b或者多个b结尾的字符串
"ab+" 匹配以a开头,以1个b或者多个b结尾的字符串
"ab?" 匹配以a开头,以0个b或者1个b结尾的字符串
"a?b+$" 匹配以0个a或者1个a再加上一个以上b结尾的字符串
可以在大括号里面限制字符出现的个数:
"ab{2}" a后面要跟2个b
"ab{2,}" a后面跟2个b或者2个以上的b
"ab{2,5}" a后面跟2到5个b
--------------------------------------有的书写到,需要验证比如:----------------------------------------
g后面跟两个或者5个o,写为 g\{2,5\}
g后面跟两个以上的o,写为g\{2,\}
加上小括号的情况:
"a(bc)*" a后面跟0个1个或者多个bc
"a(bc){1,5}" a后面跟1个到5个bc
4.| 类似于or,或关系
"hi | hello" 匹配包含有hi或者hello的字符串
"(b | cd)ef" 匹配bef或者cdef的字符串
"(a | b)*c" 匹配包含有N个(包含0)a或者b以c结尾的字符串
5. .
.代表所有的单一字符,但不代表"\n",如果要匹配"\n",那么使用"[\n.]"
"a.[0-9]" 1个a加上0到9间的任意一个数字
"^.{3}$" 3个任意字符结尾
所以假设要表达good grtd gttd等时候,使用g..d就可以来表示
6. []
中括号括住的只代表单一的字符
"[ab]" 匹配1个a或者1个b,等同于 "a | b"
"[a-d]" 匹配a到d的单一字符,等同于"a | b | c | d"或者[abcd]
"^[a-zA-Z]" 匹配大小写开头的字符串
"[0-9]%" 匹配形如x%的字符串
",[a-zA-Z0-9]$" 匹配以一个逗号加一个大小写字母或者数字结尾的字符串
在[]中使用^,就是将^后面所跟的字符排除.
"%[^a-zA-Z]%" 匹配含有两个%中间非字母的字符串
"[^a-z\.!^ -]" 表示没有小写字母,没有. 没有! 没有空格 没有-
7.总结
\< 匹配任何词开头的空字符串。
\> 匹配任何词结尾的空字符串。
当匹配类似于邮箱用户名的正则表达式时候,邮箱名中间可能会有-或者_,那么_和-的表达只能放在整个正则表达式的最前面或者最后面,放到中间不行,那样的话就会引起错误. 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效.
()将部分内容合成一个单元组.比如 要搜索 glad 或 good 可以这样 'g(la|oo)d'
8.grep与正则表达式
grep
-a 以文本文件方式搜索
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向输出,输出没有"搜寻字符串"的内容
-i 忽略大小写
-E, --extended-regexp 采用规则表示式去解释样式,等同于egrep,egrep是grep -E的别名.
-F 如果想在文件中找到包含星号字符的行,则需要使用此参数
[root@localhost tmp]# grep -F '*' /tmp/*
/tmp/123:*
[root@localhost tmp]# grep -F "*" /tmp/*
/tmp/123:*
/tmp/123:1*2
/tmp/123:1111*77
9. \. 和 //
\.代表.
//在正则表达式中是特殊符号,所以要用\来转义
在windows DOS下生成的文本文件,换行会加上^M字符,处理windows的文本时候需要注意,将^M删除.在linux中^M等同于\r
比如:
cat dos_file | tr -d "\r" > linux_file
阅读(1434) | 评论(0) | 转发(0) |