3.2.2.3 单个表达式匹配多字符

    匹配多字符最简单的方法就是把它们一个接一个(连接)列出来,所以正则表达式 ab 匹配于 ab, ..(两个点号)匹配于任意两个字符,而 [[:upper:][:lower:]] 则匹配于任意一个大写字符,后面接着任意一个小写字符。不过,将这些字符全列出来只有在简短的正则表达式里才好用。
 
    虽然 . (点号)meta 字符与方括号表达式提供了一次匹配一个字符的很好方式,但正则表达式真正强而有力的功能,其实是在修饰符( modifier)meta 字符的使用上。这类 meta 字符紧接着在具有单个字符的正则表达式时候,且它们hi改变正则表达式的含义。最常用的修饰符为星号(*),表示“匹配0个或多个前面的单个字符”。
 
    注意:“匹配0或多个”不表示“匹配其他的某一个”,了解这一点是相当重要的。也就是说,正则表达式 ab*c 下,文本 aQc 是不匹配的--即便是 aQc 里拥有0个 b 字符。相对地,以文本 ac 来说,b* 在 ab*c 里表述的是匹配 a 与 c 之间含有空字符串(null string)--意即长度为0的字符串。
 
    *修饰符是好用的,但它没有限制,你不能用*表示“匹配三个字符,而不是四个字符”,而要使用一个复杂的方括号表达式,表明所需的匹配次数--这也是件很麻烦的事。区间表达式可以解决这类问题。就像 * ,它们一样接在单个字符正则表达式后面,控制该字符连续重复几次即为匹配成功。区间表达式是将一个或两个数字,放在 \{ 和 \} 之间,有3种变化,如下:
 
  1.  \{n\}          前置正则表达式所得结果重现 n 次
  2. \{n,\}          前置正则表达式所得结果重现至少 n 次
  3. \{n,m\}       前置正则表达式所得结果重现 n 至 m 次
 
    有了区间表达式,要表达像“重现5个 a ”或是“重现10到42个 q ”就变得很简单了,这两项分别是:a\{5\}     q\{10,42\}。
 
    n 与 m 的值必须介于0至RE_DUP_MAX(含)之间。
 
    RE_DUP_MAX 的获取方法:
 
    [many@avention Desktop]$ getconf RE_DUP_MAX
    32767
 
 
 
posted @ 2019-01-23 09:03  Avention  阅读(173)  评论(0编辑  收藏  举报