正则表达式

正则表达式


定义

所谓正则表达式,实际上就是用来描述某些字符串匹配规则的工具。由于正则表达式语法简练,功能强大,得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等。

一个正则表达式是一个字符串.字符串里的字符被称为元字符,它们可能表示了比它们字面上看起来的意思更丰富的含义.
例如,一个引用符号可能表示引用一个人演讲中的话,或者表示下面将要讲到的,引申表示的意思.正则表达式是一个字符或/和元字符组合成的字符集,它们匹配(或指定)一个模式

在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成。

当一个正则表达式完成之后,并能够保证这个表达式一定是准确的,需要不断地测试才可以确定其正确与否。在不同的环境下,用户需要不同的工具来帮助他完成测试的过程。如果是在Shell命令行中,用户可以使用grep命令来测试。

正则表达式分类

正则表达式:REGEXP,REGular EXPression

正则表达式分为两类:

  • Basic REGEXP(基本正则表达式)
  • Extended REGEXP(扩展正则表达式)

基本正则表达式

//元字符
    .           //任意单个字符
[root@localhost practise]# ls
1  2  3  4  5  6  7  8  9  a  b  c  jj  qq  zz
[root@localhost practise]# ls | grep '^.$'
1
2
3
4
5
6
7
8
9
a
b
c

    []          //匹配指定范围内的任意单个字符(同类型的字符可以取范围)
[root@localhost practise]# ls | grep '^[1-9]$'
1
2
3
4
5
6
7
8
9

    [^]         //匹配指定范围外的任意单个字符
[root@localhost practise]# ls | grep '^[^1-5]$' #除1-5之外的字符
6
7
8
9
a
b
c

//匹配次数(贪婪模式)
    *           //匹配其前面的任意单个字符任意次
[root@localhost practise]# ls
1  2  3  4  5  6  7  8  9  a  ab  abb  abbb  b  c  jj  qq  zz
[root@localhost practise]# ls | grep '^ab*$'
a
ab
abb
abbb

    .*          //任意长度的任意字符
[root@localhost practise]# ls | grep '^ab.*$'
ab
abb
abbb

    \?          //匹配其前面的任意单个字符1次或0次
[root@localhost practise]# ls | grep '^ab\?$'
a
ab

    \+          //匹配其前面的任意单个字符至少1次
[root@localhost practise]# ls | grep '^ab\+$'
ab
abb
abbb

    \{m,n\}     //匹配其前面的任意单个字符至少m次,最多n次
[root@localhost practise]# ls | grep '^ab\{1,2\}$'
ab
abb

//位置锚定
    ^           //锚定行首,此字符后面的任意单个字符必须出现在行首
[root@localhost practise]# ls | grep '^a'
a
ab
abb
abbb

    $           //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@localhost practise]# ls | grep 'b$'
ab
abb
abbb
b

    ^$          //空白行
[root@localhost practise]# cat a
hello black chiken dog cyong jiopi

nm nms wdnmd wqnnlgb cnmdeligehi
[root@localhost practise]# grep ^$ a

[root@localhost practise]# 
[root@localhost practise]# grep -v ^$ a #-v取反
hello black chiken dog cyong jiopi
nm nms wdnmd wqnnlgb cnmdeligehi

    \<\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
    \>\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
/分组
[root@localhost practise]# cat a
hello black chiken dog cyong jiopi

nm nms wdnmd wqnnlgb cnmdeligehi

[root@localhost practise]# grep '\<h' a
hello black chiken dog cyong jiopi
[root@localhost practise]# grep 'i\>' a
hello black chiken dog cyong jiopi
nm nms wdnmd wqnnlgb cnmdeligehi

/分组
    \(\)
    例:\(ab\)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@localhost practise]# cat a
hello dog black
hello runtime aducation
[root@localhost practise]# sed 's/hello \(.*\) \(.*\)/\2 hello \1/' a
black hello dog
aducation hello runtime

扩展正则表达式

//字符匹配
    .       //匹配任意单个字符
[root@localhost practise]# ls | egrep '^.$'
1
2
3
4
5
6
7
8
9
a
b
c

    []      //匹配指定范围内的任意单个字符
[root@localhost practise]# ls | egrep '^[1-6]$'
1
2
3
4
5
6

    [^]     //匹配指定范围外的任意单个字符
[root@localhost practise]# ls | egrep '^[^1-9]$'
a
b
c

//次数匹配
    *       //匹配其前面的任意单个字符任意次
[root@localhost practise]# ls | egrep '^ab*$'
a
ab
abb
abbb

    ?       //匹配其前面的任意单个字符1次或0次
[root@localhost practise]# ls | egrep '^ab?$'
a
ab

    +       //匹配其前面的任意单个字符至少1次
[root@localhost practise]# ls | egrep '^ab+$'
ab
abb
abbb

    {m,n}   //匹配其前面的任意单个字符至少m次,至多n次
[root@localhost practise]# ls | egrep '^ab{1,3}$'
ab
abb
abbb

//位置锚定
    ^       //锚定行首,此字符后面的任意单个字符必须出现在行首
[root@localhost practise]# cat a
hello dog black
hello runtime aducation

[root@localhost practise]# egrep '^hello' a
hello dog black
hello runtime aducation

    $       //锚定行尾,此字符前面的任意单个字符必须出现在行尾
[root@localhost practise]# cat a
hello dog black
hello runtime aducation

[root@localhost practise]# egrep 'black$' a
hello dog black

    ^$      //空白行
[root@localhost practise]# egrep ^$ a
[root@localhost practise]# egrep -v ^$ a #-v取反
hello dog black
hello runtime aducation

    \<\b       //锚定词首,其后面的任意单个字符必须作为单词首部出现
    \>\b       //锚定词尾,其前面的任意单个字符必须作为单词尾部出现
[root@localhost practise]# cat a
hello dog black
hello runtime aducation

[root@localhost practise]# egrep '\bhello' a
hello dog black
hello runtime aducation

[root@localhost practise]# egrep 'black\b' a
hello dog black

//分组
    ()      //分组
    \1\2\3....
   例:(ab)*
    //后向引用
        \1      //引用第一个左括号以及与之对应的右括号所包括的所有内容
        \2      //引用第二个左括号以及与之对应的右括号所包括的所有内容
[root@localhost practise]# cat a
hello dog black
hello runtime aducation
[root@localhost practise]# sed -r 's/(hello) (.*) (.*)/\3 \2 \1/' a #-r支持扩展正则表达式的选项
black dog hello
aducation runtime hello
//上面可以看出来hello是第一组,dog是第二组,black是第三组,后面我用\3 \2 \1的排序顺序就直接倒过来了
root@localhost practise]# cat a
hello dog black
hello runtime aducation
[root@localhost practise]# sed -r 's/(hello) (.*) (.*)/\3 \2 \1/' a #-r支持扩展正则表达式的选项
black dog hello
aducation runtime hello
//上面可以看出来hello是第一组,dog是第二组,black是第三组,后面我用\3 \2 \1的排序顺序就直接倒过来了
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随便投投

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值