• 常用通配符和正则表达式的误区


    通配符适用的地方:shell命令行或者shell脚本中,一般用来匹配文件名的。

    正则表达式适用的地方:字符串处理时,一般有一般正则和Perl正则。

    最近写shell的时候发现一直以来对正则和通配符的理解有偏差,让我们再认识一下这几个基本的符号。

    1,通配符

     ﹡ 匹配所有:匹配0个到多个的任意的字符。

      ?匹配任意单个字符

      
    [ ! ] 匹配 不在中括号内的一个字符 (和正则中的 [ ^ ]作用相似,都是反向选择)

    当要把以上的* ,?,[ ]当成参数或者字符串处理时,就要限制shell不能当成通配符。这时的处理方法是:加单引号或者用(反斜杠转义)

    2.正则表达式

      

    字符匹配

    .:匹配任意单个字符

    *:匹配其前面一个字符出现任意次(区别与通配符的一到多个字符)

    ?:匹配其前面的字符1次或0次

    +:匹配其前面一个字符出现至少一次(在扩展正则表达式中)

    位置匹配

    ^:锚定行首

    $:锚定行尾

    <或:锚定词首,其后面的任意字符必须作为单词首部出现

    >或:锚定词尾,其前面的任意字符必须作为单词尾部出现

    B:非单词的开头或结尾

    ^$:空白行

       

    分组匹配用() :

    (ac)* :匹配ac这个分组出现任意次

    1:引用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有2,3

    断言匹配 

    java仅支持<name>形式;而在其他语言中,或者在正则的设计中还有(?“name”)的格式
    零宽断言
    <?=exp>
    <?!=exp>
    <?!<=exp>
    <?<=exp>

    ^(.(?<!that))*this(.(?<!that))*$ 
    ^(.(?<!that))*this((?!that).)*$ 
    ^((?!that).)*this(.(?<!that))*$ 
    ^((?!that).)*this((?!that).)*$ 
    这4个正则表达式测试上述的几句话,结果都能够满足要求。

    懒惰模式
    懒惰限定符
    代码/语法说明
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复
    懒惰的限定符
    分组和反向引用
    (?<name>.[a-z]*?)(/d)
    表达式内可以使用    /2  来使用
  • 相关阅读:
    NSRunLoop的利用
    快速排序算法
    WebViewJavascriptBridge的暂时理解
    非常喜欢的一期《晓松奇谈》
    字符串正则替换replace第二个参数是函数的问题
    Model模型和Module模块的区别
    jQuery的extend方法的深层拷贝
    正则表达式学习记录
    select2初始化默认值
    增进编程语言学习速度的小技巧
  • 原文地址:https://www.cnblogs.com/anyehome/p/8951881.html
Copyright © 2020-2023  润新知