正则表达式简介

      一个正则表达式就是一个模式,由与文本进行匹配的字符序列组成。正则表达式有着广泛的应用:grep、sed、vim、make等等,某些脚本语言如perl等更是将正则表达式纳入语言内部。

     正则表达式由原子和运算符组成。

     最简单的原子是单个字符,如果一个正则表达式由单个字符组成,则该字符必须出现在目标文本的某处,以使模式进行成功的匹配。

    “.”匹配除了换行符(/n)外的任意单个字符,常常与其他原子结合使用创造一个表达式。如“a.”将单个原子字符a与点原子结合,表示任何以a开头的双字母组合。

     类原子定义了一个ASCII字符集。只要与该集合中任意一个字符匹配即可。类集合使用“[]”括起来。如:[abc]表示与a、b、c任意一个匹配即可,即匹配a或b或c。
     在类集合中使用“-”表示范围,如:[a-d]表示从a到d的字符列表,即匹配a或b或c或d(等价于[abcd])。
     类集合中使用“^”表示排除,即指定集合的补集为匹配模式,除了集合中标出字符之外的的任意ASCII字符,如:[^0-9]表示非数字的任意字符。
     类集合中使用“/”表示转义。对于在类集合中有特定含义的字符,使用“/”表示字符本身的意思。如:[1/-3]表示匹配1或“-”或3;[^/^]除^之外的任意字符。
     锚是在将模式与字符串的特定部分进行行对齐时使用的原子。锚本身不是匹配文本,而是一个位置标志,标示模式中下一个字符在文本中必须出现的位置。锚有四种类型:行首(^)、行尾($)、单词开头(/<)、单词结尾(/>)。锚原子经常在结合中使用,例如,^A匹配以A开头的行,a/>匹配以a结尾的单词。
     注意:行首锚(^)和行尾锚($)只有处于对应的位置才表示为锚,在其他位置则仅仅作为一个文本字符与自己进行匹配。另外行首锚(^)与排除运算符(^)的区别,^只有在类集合中才表示排除。
     向后引用:可以把文本暂时保存在9个寄存器中的其中一个,在正则表达式的后面可以使用一个向后引用引用保存在寄存器中的文本。使用转义字符和范围1到9的数字对向后引用进行编码,如:/1  /2  ... /9;向后引用用于在正则表达式内部进行匹配。

     运算符将正则表达式原子结合起来,分为:序列运算符、选择运算符、重复运算符、组运算符和保存运算符。
     序列运算符没有运算符,任何并列的原子之间均有序列运算符连接,即任何原子序列均有序列序列运算符连接而成。如:abc由原子a、b、c构成的序列,匹配含有abc的字符串。
     选择运算符(|)用于表示选择,例如:A|B表示匹配A或者B(类似单原子的选择可用类运算符号[]),选择运算通常用于字符序列或字符组。例如:Ms|Miss|Mrs匹配Miss或Ms或Mrs。

     重复运算符是转义大括号(/{m,n/})的集合,它包含由逗号分隔的两个数字的集合。用于指定重复运算符前原子或表达式的重复次数。m指出重复出现的最少次数,n指出重复出现的最大次数。例如:A/{3,5/}匹配AAA或AAAA或AAAAA,重复太少或太多均不可。
     /{m,n/}中m,n是可选的,但是必须至少指定一个。当大括号中只有一个数字时(不含逗号,即/{x/})则表示精确重复X次--不能多或少。如果n值省略(即/{m,/})表示必须至少出现m次,即重复的次数>=m。同理,当m值省略(即/{,n/})时,则表示最多出现n次,即重复的次数为0~3次。
     星号运算符(*)表示重复前面的原子0或多次,即等同于/{0,/}。加号(+)用于指定原子必须出现1或多次,即等同于/{1,/}。问号(?)用于表示原子出现0或1次,即等同于/{0,1/}。
     注意:点(.)运算符与重复运算符的搭配,例如:.*匹配0到多个非换行符。另外,正则表达式中的运算符(*?)与通配符(*  ?)的区别,正则表达式的运算符不能单独使用,只是用来标注其前面原子的重复次数,而通配符本身就代表了字符及重复次数两个含义。
     关于重复运算的匹配方式:贪婪模式匹配,表示在模式匹配中,匹配的最终结果是取与模式匹配的最长字符串。(有些应用中提供最小匹配的选项)。

     组运算符是一对圆括号“()”。组运算符内的结果将作为一个整体参加下一个运算符的操作。例如:(AB)/{2/}表示AB必须重复两次,即ABAB。

     保存运算符是转义的小括号集合/(/),用于把匹配的文本保存到9个寄存器中的一个,以便后面引用。在一个正则表达式内,第1个被保存的文本被复制到寄存器1,第2个被复制到寄存器2等等,最多可到第9个寄存器。一旦文本被保存,就可以使用向后引用引用它。例如:/([a-z]/).*/1匹配以相同字母开始和结尾的字符串(注意,由于匹配的贪婪模式,匹配的字符串应最大化)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值