zoukankan      html  css  js  c++  java
  • POSIX正则表达式

    POSIX正则表达式规范

    参考:http://en.wikipedia.org/wiki/Regular_expression

      POSIX正则表达式分为Basic Regular Expressions 和 Extended Regular Expressions。

      ERE增加支持?,+和|,去除了通配符()和{}。而且POSIX正则表达式的标准语法经常坚持使用附加的语法来支持特殊应用。虽然POSIX.2没有实现一些具体的细节,BRE和ERE提供被很多工具使用的标准。

      BRE要求通配符()和{}写成和{},ERE中无需这样。

    基本通配符

    通配符

    描述

    .

    匹配任何一个单字符(许多应用不包括换行符,但是假设包括换行符也是安全的)。在大中小括号中,该通配符只匹配字符’.’,例如,a.c匹配”abc”,但是[a.c]只匹配”a”或”.”或”c”。要匹配’.’不能使用’.’,因为’.’的作用与’.’一样,应该使用’[.]’来匹配”a.c”中的点。

    []

    只匹配中括号内的一个字符。例如[abc]匹配”a”或”b”或”c”。[a-z]匹配小写的”a”到”z”。这些格式可以混合使用:[abcx-z]匹配”a”,”b”,”c”,”x”,”y”,”z”与[a-cx-z]的效果相同。

    ‘-’如果出现在[]的开头或结尾,表示匹配字符’-’,例如[^-abc],[-abc] ,[abc-]。注意不能使用’’。

    ‘]’可以出现在中括号中的第一个位置,例如[]abc]或[^]abc]

    [^ ]

    匹配单个字符,该字符不能包含在中括号中。例如,[^abc]匹配任何除’a’,’b’,’c’外的字符。[^a-z]匹配任何除’a’-‘z’的字符。同理,字符与范围标识可以混合使用,例如,[^a-cx-z]。

    ^

    匹配字符串的开头。在基于行的工具中,匹配每一行的开头。

    $

    匹配字符串的结尾或者换行符的前一个位置。在基于行的工具中,匹配每一行的结尾。

    ()

    定义一个子表达式。圆括号在整体匹配完后进行匹配。子表达式也叫做块或组。

    BRE模式需要写成

    匹配第n(1<=n<=9)个子表达式。POSIX.2对该通配符的定义很模糊,有的工具允许引用大于9的子表达式。

    *

    匹配前一个元素0次或多次。例如,ab*c匹配”ac”,”abc”,”abbbbbc”等。[xyz]*匹配””,”x”,”y”,”z”,”zx”,”zyx”,”xyzzy”等。(ab)*匹配””,”ab”,”abab”等。

    {m,n}

    匹配前一个元素至少m次,至多n次。例如,a{3,5}匹配”aaa”,”aaaa”,”aaaaa”。

    BRE模式需要写成{m,n}

     

    举例

    .at

    匹配任何以”at”结尾长度为3的字符串,例如” at”,”aat”,”cat”等

    [hc]at

    匹配”hat”和”cat”

    [^b]at

    除了”bat”,匹配任何以”at”结尾长度为3的字符串。例如,”aat”,”cat”等

    [^hc]at

    除了”hat”和”cat”,匹配任何以”at”结尾长度为3的字符串。例如,”aat”,”tat”等

    ^[hc]at

    匹配任何以”hat”或”cat”开头的字符串或行

    [hc]at$

    匹配任何以”hat”或”cat”结尾的字符串或行

    .

    匹配任何三个字符,第一个和第三个字符必须分别为”[”,”]”,因为”[”和”[”是经过转义,例如”[a]”,”[b]”

    s.*

    匹配任何以”s”开头的字符串,例如”swa”,”seed”

    Extended Regular Expressions

    在ERE中,反斜杠’’用来对通配符进行转义,所以BRE中的’(’和’)’在ERE中改为’(’和’)’,’{’和’}’改为’{’和’}’。 ERE移除了’ ’通配符,并添加了如下通配符。

    通配符

    描述

    ?

    匹配前一个元素0次或1次。例如,ab?c匹配”ac”,”abc”。

    +

    匹配前一个元素1次或多次。例如,ab+c匹配”abc”,”abbc”等,但是不能匹配”ac”。

    |

    匹配前一个表达式或后一个表达式。例如,abc|def匹配”abc”,”def”。

     

    举例

    [hc]+at

    匹配”hat”,”cat”,”hhat”,”ccat”等,但是不匹配”at”

    [hc]?at

    匹配”hat”,”cat”,”at”

    [hc]*at

    匹配”at”,”hat”,”cat”,”hcat”等

    cat|dog

    匹配”cat”,”dog”

    Character classes

    character class 是除了字面匹配最基本的正则表达式。它是很小的字符序列匹配更大的字符序列。例如,[A-Z]可以表示字母表,d表示任意数字。character class应用于BRE和ERE。

    当使用范围通配符时,例如[a-z]。计算机本地设置决定了字符编码的顺序。计算机可能按a-z的顺序来存储,或者abc…zABC…Z,或者aAbBcC…zZ的顺序。所以POSIX定义了character class,正则表达式的处理器可以正确解析该character class。

    POSIX

    ASCII

    描述

    [:alnum:]

    [A-Za-z0-9]

    数字和字母字符

    [:alpha:]

    [A-Za-z]

    字母字符

    [:blank:]

    [ ]

    空格和TAB

    [:cntrl:]

    [x00-x1Fx7F]

    控制符

    [:digit:]

    [0-9]

    数字

    [:graph:]

    [x21-x7E]

    可视字符

    [:lower:]

    [a-z]

    小写字母字符

    [:print:]

    [x20-x7E]

    可视字符和空格

    [:punct:]

    [][!"#$%&'()*+,./:;<=>?@^_`{|}~-]

    标点符号

    [:space:]

    [ vf]

    空白字符

    [:upper:]

    [A-Z]

    大写字母字符

    [:xdigit:]

    [A-Fa-f0-9]

    十六进制字符

    POSIX定义的character class只能在中括号内使用。例如,[[:upper:]ab]匹配大写字母字符和”a”,”b”。

    [:word:]是附加的非POSIX的character class,[:word:]表示[:alnum:]和下划线。这表明在很多编程语言中,这些通配符可能是标识符。

    敦品厚德 格物致知
  • 相关阅读:
    logstash performance testing
    Elasticsearch ML
    jconsole远程监控logstash agent
    kafka总结
    cloudera learning8:MapReduce and Spark
    cloudera learning7:Hadoop资源管理
    cloudera learning6:Hadoop Security
    cloudera learning5:Hadoop集群高级配置
    查看硬件设备指令
    内存问题
  • 原文地址:https://www.cnblogs.com/crunchyou/p/4877427.html
Copyright © 2011-2022 走看看