• 正则表达式RE与扩展正则表达式ERE——grep与egrep


    grep 
    正则表达式规则:
    
    ^        行首定位符,表示从行首开始进行模式匹配
    .        一个非换行符的字符
    [ ]       匹配属于此集合的任意一个字符
    [^ ]      匹配不属于此集合的任意一个字符
    [a-z]    (其指定的集合包含从a到z的所有小写字母,)
            转义控制符,用来转义元字符或者转义普通字符
    (...)    标记此模式为一个分组
    <       单词首位定位符,单词的定义为: [A-Za-z0-9_]+
    >       单词末尾定位符
    x{m}     字符x重复匹配m次
    x{m,}    字符x至少重复匹配m次,贪婪匹配原则
    x{m,n}   字符x重复匹配m次至n次,贪婪匹配原则
    *        等价于 {0,}
    |       匹配条件或
    $        行尾定位符

    练习:写一个正则表达式模式可用来匹配标准ipv4地址,形如0-255.0-255.0-255.0-255

    解:

    0-255可分解如下:
    0-9      [0-9]
    10-99     [1-9][0-9]
    100-199    1[0-9]{2}
    200-249    2[0-4][0-9]
    250-255    25[0-5]

    使用'或'合并得到:

    ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

    整理,易得:

    <(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))>

    运行结果:



    egrep
    扩展正则表达式规则:
    
    ^        行首定位符,表示从行首开始进行模式匹配
    .        一个非换行符的字符
    [ ]       匹配属于此集合的任意一个字符
    [^ ]      匹配不属于此集合的任意一个字符
    [a-z]      (其指定的集合包含从a到z的所有小写字母,)
            转义控制符,用来转义元字符或者转义普通字符
    (...)      标记此模式为一个分组
    <        单词首位定位符,单词的定义为: [A-Za-z0-9_]+
    >        单词末尾定位符
    x{m}       字符x重复匹配m次
    x{m,}       字符x至少重复匹配m次,贪婪匹配原则
    x{m,n}      字符x重复匹配m次至n次,贪婪匹配原则
    *        等价于 {0,}
    ?        等价于 {0,1}
    +        等价于 {1,}
    |        匹配条件或
    $        行尾定位符

    由此易看出,扩展正则表达式与正则表达式之间的根本区别为,其增大了元字符的集合范围,增加的元字符有:

    + ? | { } ( )

    这使得模式表现的更加简洁。

    练习:写一个扩展正则表达式模式可用来匹配标准ipv4地址,形如0-255.0-255.0-255.0-255
    解:

    0-255可分解如下:
    0
    -9   [0-9] 10-99  [1-9][0-9] 100-199 1[0-9]{2} 200-249 2[0-4][0-9] 250-255 25[0-5]

    使用'或'合并得到:

    ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

    整理,易得:

    <(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))>

     运行结果:

    附录:

    //grep options
    -?   同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。 -b,--byte-offset   打印匹配行前面打印该行所在的块号码。 -c,--count   只打印匹配的行数,不显示匹配的内容。 -f File,--file=File   从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。 -h,--no-filename   当搜索多个文件时,不显示匹配文件名前缀。 -i,--ignore-case   忽略大小写差别。 -q,--quiet   取消显示,只返回退出状态。0则表示找到了匹配的行。 -l,--files-with-matches   打印匹配模板的文件清单。 -L,--files-without-match   打印不匹配模板的文件清单。 -n,--line-number   在匹配的行前面打印行号。 -s,--silent   不显示关于不存在或者无法读取文件的错误信息。 -v,--revert-match   反检索,只显示不匹配的行。 -w,--word-regexp   如果被<和>引用,就把表达式做为一个单词搜索。

     

  • 相关阅读:
    吴裕雄--天生自然ANDROID开发学习:1.9 Android程序签名打包
    吴裕雄--天生自然ANDROID开发学习:1.8 工程相关解析(各种文件,资源访问)
    html 上传预览图片
    git笔记
    iscroll 下拉刷新功能
    移动端页面 弹出框滚动,底部body锁定,不滚动 / 微信网页禁止回弹效果
    getElementsByClassName 兼容性
    登录页面-输入框清空按钮
    FireFox中iframe的返回上页问题
    ajax是异步的,异步取数据,如何能保证数据是存在的。
  • 原文地址:https://www.cnblogs.com/SwordTao/p/3565441.html
Copyright © 2020-2023  润新知