shell-正则表达式

说到正则表达式,先了解一下shell中的查找功能:

grep      使用POSIX定义的基本正则表达式
egrep     扩展式grep,功能更强大的正则表达式
fgrep     快速grep,匹配固定的字符串而非正则表达式


grep
-E  可替代传统的egrep
-F  可替代传统的fgrep
-e pat-file 
-f pat-file
-i   模式匹配忽略字母大小写差异
-l   列出匹配模式的文件名称,而不是打印匹配的行
-q   如果匹配成功,grep会成功地离开,不将匹配的行写入标准输出,否则就是不成功
-s   不显示错误信息,通常和-q并用
-v   显示不匹配模式的行


grep [options] pattern-spec [files]


正则表达式      
正则表达式是一个字符或和元字符组合成的字符集,他们匹配一个模式。字符即普通字符,元字符即特殊字符。


一个正则表达式包含下面一个或多个
1.字符集
2.锚 指明了正则表达式在一行文本中要匹配的位置,例如^和$
3.修饰符 用于展开或缩小正则表达式匹配文本行的范围,如:星号,括号,反斜杠




重复字符:-----------------------------------
* 匹配重复0次或多次字符
+ 匹配1个或多次字符
匹配0或1个次字符
{n} 匹配n次
{n,} 匹配n次或多次
{n,m} 匹配n到m次




元字符::-----------------------------------
^ 匹配一行的开头或补集              
$ 匹配一行的结尾
^\d{5,12}$ 匹配5-12个数字
也可以用来匹配行的开头和结尾


\b 匹配单词的开头或结尾   \bhi\b  只会匹配hi, 不会匹配him这种
.* 匹配任意数量的不包含换行的字符
\d 匹配数字
\w 匹配字符或数字或下划线或汉字
\s 匹配任意的空白字符
. 匹配除了换行符外的任意字符




分支条件: ”|“
\d{5}-\d{4} | \d{5} 匹配00000-0000或00000数字
如果第一条件满足就不再理第二条件


反义:
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以为任意的字符
[^adiou] 匹配除了aeiou这几个字母以为的任意字符




后向引用:
用于重复搜索前面某个分组匹配的文本。
使用小括号指定一个子表达式,匹配这个子表达式的文本可以在表达式或其他程序中做进一步的处理,默认情况下,每个分组会自动拥有一个组号,规则是从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
也可以自己指定子表达式的组名,(?<Word>\w+)把\w+的组名指定为Word,要反向引用这个分组,可以用\k<Word>


捕获:
(exp) 匹配exp,自动命名
(?<name>exp) 匹配exp,命名为name
(?:exp) 匹配exp,不捕获匹配的文本,也不分配组号
零宽断言:
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置


例子:
(?<=<(\w+)>).*(?=<\/\1>)  匹配HTML标签<b>...</b>
注释:
(?#comment)




贪婪与懒惰:
当表达式中包含能接受重复的限定符时,通常的行为时匹配尽可能多的字符,如a.*b,它会匹配最长的以a开头,b结束的字符,这成为贪婪
想发。懒惰的匹配就是匹配尽可能少的字符,,只要在表达式后面加上一个?,就可以实现懒惰的匹配。
比贪婪和懒惰优先级更高的是:最开始的匹配拥有最高的优先权,如: a.*?b  匹配  aabab  先匹配aad 再匹配ab


*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上, 但尽可能少重复


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值