• POSIX正则表达式 | BRE和ERE


    最后修改时间:2020/11/9

    简介

    POSIX标准定义了两种regex,分别是BRE(Basic Regular Expression)和ERE(Extended Regular Expression)。linux中的命令(程序)如grep,less,以及一些数据库都实现了POSIX正则表达式。

    POSIX括号表达式

    POSIX括号表达式形如[...],能够匹配表达式所表达的字符集中的一个字符,是一种特殊的字符类(character class)。

    和一般character class类似,使用[^来反选字符集,使用-来表达范围。

    字符类(character class)

    POSIX未定义d, w等缩写,但支持以下的命名类:

    Character Group Meaning
    [:alnum:] Alphanumeric
    [:cntrl:] Control Character
    [:lower:] Lower case character
    [:space:] Whitespace
    [:alpha:] Alphabetic
    [:digit:] Digit
    [:print:] Printable character
    [:upper:] Upper Case Character
    [:blank:] whitespace, tabs, etc.
    [:graph:] Printable and visible characters
    [:punct:] Punctuation
    [:xdigit:] Extended Digit

    使用命名类时,需要再外加方括号,如同[[:alnum:]]

    POSIX BRE

    **大多数Regex flavor包括POSIX ERE的metacharacter都不含前缀,但是BRE的一些metacharacter相反。

    BRE中,^, $, ., *, 这几个符号需要转义才能使用字面值

    BRE的其他metacharacter需要含表示特殊语义。a{1,2}匹配字符串a{1,2},而a{1,2}匹配a, aaBRE不支持量词+?.但支持以下表达式:
    {n}:恰出现n次
    {n,}出现n次或更多
    {,m}:最多m次。这是GNU拓展
    {n,m}:最少n次,最多m次

    BRE使用()来将字符组合成组。支持回溯。

    此外BRE不要求支持|, +, ?但是,GNU实现的BRE和ERE没有功能上的差别。因此在grep,less等命令中可以使用|表示或,使用+表示匹配一次或多次,使用'?'表示匹配0次或1次。

    POSIX ERE

    POSIX ERE的metacharacter不含前缀。如a{1,2}能够匹配a, aa

    ERE能够支持|, ?, +

    其他

    二者均支持capturing group和backreference。使用 即可表示backreference,其中n是索引,但对于BRE,n取值在1至9之间。

    此外,POSIX正则总是greedy,不支持其他的模式。

    对于word边界的匹配,POSIX定义了[[:<:]][[:>:]]分别表示匹配左边界和右边界。GNU拓展则使用<>。经过测试,vim和less都不支持POSIX的定义,但支持<, >

    一些示例

  • 相关阅读:
    压测基础
    性能压测终极武器之arthas
    python 返回当前文件夹下的所有文件的绝对路径;打印文件中的中文字符
    python 虚拟环境及项目快速迁移
    python3 解决bytes转str时抛“UnicodeDecodeError”异常
    mac系统环境变量
    kafka生产消费消息
    mac pycharm打不开问题
    jmeter获取毫秒时间戳
    两种方式 获取数据库某个表中所有的数据数量条数
  • 原文地址:https://www.cnblogs.com/wyzersblog/p/13709354.html
Copyright © 2020-2023  润新知