精华内容
下载资源
问答
  • shell 中 贪婪匹配 贪婪匹配

    千次阅读 2017-04-17 10:53:01
    举个栗子:   ... 一个%为贪婪匹配,即...%从右到左进行贪婪匹配匹配什么呢? 匹配已 .*的字符。 那么当然是匹配到了.com 然后执行删除匹配到的字符。结果就是(这里的 "." 相当于定界符。而“*”是通

    举个栗子:

      

    1
    2
    v =jfedu.shiyiwen.com
    echo  ${ v %.*}

     一个%为非贪婪匹配,即匹配最短结果。%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符。 那么当然是匹配到了.com 然后执行删除匹配到的字符。结果就是(这里的 "." 相当于定界符。而“*”是通配符)

    jfedu.shiyiwen

    1
    echo  ${ v %%.*}

     而这里执行贪婪匹配,即匹配最长结果就匹配到了 .shiyiwen.com 结果为

    jfedu

     

     

    这里在说一个 # 刚好和 %顺序相反而已,#是从左到右来进行匹配的。 老规矩:举个栗子

    1
    2
    3
    4
    5
    6
    7
    v =jfedu.shiyiwen.com
     
    echo  ${ v #*.}
    shiyiwen.com
     
    echo  ${ v ##*.}
    com

     用处有很多,比较常见的就是很方便的获取文件后缀名和文件名。举个栗子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    01. #!/bin/bash 
    02. 
    03.num=1 
    04. for  in  *. tar  *. tar .gz 
    05. do 
    06.new=new_$num.${i #*.}     
    07. mv  $i $new 2> /dev/null 
    08. 
    09. if  [ $? - eq  0 ]; then 
    10.     echo  "remove $i to $new" 
    11.     let  num++ 
    12. fi 
    13.     
    14. done

     

    在补充一些:

    ${#VALUE}:计算VALUE字符串的字符数量。

    • ${VALUE%.*}${VALUE%%.*}:删除VALUE字符串中以分隔符“.”匹配的右边字符,保留左边字符。
    • ${VALUE#*.}${VALUE##*.}:删除VALUE字符串中以分隔符“.”匹配的左边字符,保留右边字符。
    • ${VALUE/OLD/NEW}${VALUE//OLD/NEW}:用NEW子串替换VALUE字符串中匹配的OLD子串。

        补充:“*”表示通配符,用于匹配字符串将被删除的字串。“.”表示字符串中分隔符,可以为任意一个或多个字符。“%”表示从右向左匹配,“#”表示从左向右匹配,“\”表示替换,都属于非贪婪匹配,即匹配符合通配符的最短结果。与“%”、“#”和“/”类似的有“%%”、“##”和“//”,都属于贪婪匹配,即匹配符合通配符的最长结果。

    1. ${VALUE:OFFSET}${VALUE:OFFSET:LENGTH}:从VALUE字符串的左边开始中截取子串。
    2. ${VALUE:0-OFFSET}${VALUE:0-OFFSET:LENGTH}:从VALUE字符串的右边开始中截取子串。

        补充:左边第一个字符从“0”开始,右边第一个字符从“0-1”开始。 表示偏移OFFSET个字符开始,LENGTH表示要截取字符的长度。如果没有LENGTH变量,表示偏移OFFSET个字符开始到字符串结束。

    1. ${VALUE:-WORD}:当变量未定义或者值为空时,返回值为WORD的内容,否则返回变量的值。
    2. ${VALUE:=WORD}:当变量未定义或者值为空时,返回WORD的值的同时并将WORD赋值给VALUE,否则返回变量的值。
    3. ${VALUE:+WORD}:当变量已赋值时,其值才用WORD替换,否则不进行任何替换。
    4. ${VALUE:?MESSAGE}:当变量已赋值时,正常替换。否则将消息MESSAGE送到标准错误输出(若此替换出现在SHELL程序中,那么该程序将终止运行)。

        补充:WORD可以为一个字符串,也可以为一个变量。当为变量时,需要用“$”引用该变量。

    另外 ${}的用途,请查看博客的另外一篇博文。

    展开全文
  • 所谓贪婪匹配就是匹配重复字符是尽可能多的匹配,比如: "aaaaa".match(/a+/); //["aaaaa", index: 0, input: "aaaaa"] 贪婪匹配就是尽可能少的匹配,用法就是在量词后面...但是贪婪匹配有时候我们期待的并不

    所谓贪婪匹配就是匹配重复字符是尽可能多的匹配,比如:

    "aaaaa".match(/a+/);
    //["aaaaa", index: 0, input: "aaaaa"]

    非贪婪匹配就是尽可能少的匹配,用法就是在量词后面加上一个“?”,比如:

    "aaaaa".match(/a+?/);
    //["a", index: 0, input: "aaaaa"]

    但是非贪婪匹配有时候和我们期待的并不一样,比如:

    "aaab".match(/a+b/);
    ["aaab", index: 0, input: "aaab"]
    "aaab".match(/a+?b/);
    ["aaab", index: 0, input: "aaab"]
    

    在我们期待的情况下非贪婪匹配应该是匹配"ab"才对但是结果却和贪婪匹配时一样的。

    在《权威指南》中有这么一句话:正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。

    个人对这句话的理解是:上例中正则表达式会先找到第一个字符a,因为a后面连接的字符有可能形成匹配,这是正则表达式就认定这个位置的字符了,然后开始往后进行匹配,如果像第一个例子中那样非贪婪匹配,匹配到第一个a就结束了,但是第二个例子中还要匹配b所以不得不接着往下匹配直到匹配到b为止结束。

    展开全文
  • Brute Force匹配(暴力匹配)FLANN匹配区别

    Brute Force匹配和FLANN匹配是OpenCV二维特征点匹配常见的两种办法,分别对应BFMatcher(BruteForceMatcher)和FlannBasedMatcher


          二者的区别在于BFMatcher总是尝试所有可能的匹配,从而使得它总能够找到最佳匹配,这也是Brute Force(暴力法)的原始含义。而FlannBasedMatcher中FLANN的含义是Fast Library forApproximate Nearest Neighbors,从字面意思可知它是一种近似法,算法更快但是找到的是最近邻近似匹配,所以当我们需要找到一个相对好的匹配但是不需要最佳匹配的时候往往使用FlannBasedMatcher。当然也可以通过调整FlannBasedMatcher的参数来提高匹配的精度或者提高算法速度,但是相应地算法速度或者算法精度会受到影响


    展开全文
  • 正则表达式--获取匹配和非获取匹配

    千次阅读 2014-05-20 20:56:39
    在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。    子模式有CapturingNon-Capturing两种情况。... 而Non-Capturing指获取匹配 ,这时系统并不会保存子模式的匹配

     在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。

     

        子模式有Capturing和Non-Capturing两种情况。

     

        Capturing指获取匹配 ,是指系统会在幕后将所有的子模式匹配结果保存起来,供我们查找或者替换。如后向引用的使用;

        而Non-Capturing指非获取匹配 ,这时系统并不会保存子模式的匹配结果,子模式的匹配更多的只是作为一种限制条件使用,如正向预查,反向预查,负正向预查,负反向预查等。

     


    后向引用

    使用"\数字"代表前面某个子模式的匹配内容

     

        我们使用正则表达式,在很多场景下的作用是为了查找和替换,大部分语言的正则表达式实现中,在查找时,使用后向引用来代表一个子模式,语法是"\数字",而在替换中,语法是"$数字"。

        在正则表达式中,我们可以使用 "\数字 " 来进行后向引用,数字 表示这里引用的是前面的第几个子模式。如下:

     

    Text 
    <h1>This is a valid header</h1>
    <h2>This is not valid.</h3>
    RegEx 
    <h([1-6])>.*?</h\1 >
    Result 
    <h1>This is a valid header</h1> 
    <h2>This is not valid.</h3>

     

     

        上面示例中,\1代表前面的子模式([1-6])的匹配结果 1,所以不符合的匹配<h2>..</h3>并没有被匹配。

        后向应用常见的应用常见是:

    • 匹配重复单词 (\w+) \1
    • 匹配合法的html标记,如上例。

     

    非获取匹配

    在子模式内部前面添加"?:"

     

        非获取匹配表示这个子模式的匹配内容不会被保存,不能用于后向引用中。简单说,非获取匹配就是 只匹配,不保存。看个例子:

     

    Text 
    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.
    RegEx 
    Windows (?:[\w]+\b)
    Result 
    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

     

        在这个例子中,子模式(?:[\w]+\b)是一个非获取匹配,只匹配内容,单并未保存字匹配的结果。

     

    正向预查

    在子模式的内部前面添加"?="

     

        正向预查的意思是,子模式仅仅作为条件限制,并不作为匹配结果输出,子模式前面的。

     

    Text 
    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.
    RegEx 
    Windows(?= [\d]+\b)
    Result 
    Windows 95 and Windows 98 are the successor.
    Then Windows 2000 and Windows Xp appeared.
    Windows Vista is the Latest version of the family.

     

        这个例子中,要获取所有后面带有数字的Windows字符串。子模式在这里仅仅作为一个限制条件使用,仅参与匹配过程,并不作为匹配结果输出。

     

        负正向预查的作用正好与正向预查相反,语法为在子模式内部前面增加"?!"。

     

        比如上面例子,如果RegEx为Windows(?! [\d]+\b),则匹配的结果会是Windows Xp和Windows Vista中的windows。

     

    反向预查

    在子模式的内部前面添加"?<="

     

        反向预查与正向预查很相似,子模式仅仅作为条件限制,不作为结果输出,唯一的不同是,正向预查匹配子模式前面的结果作为匹配结果,而反向预查匹配子模式后面的结果作为匹配结果。看个例子:

     

    Text 
    CNY:100.2
    USD:222.1
    USD:301.3
    HKD:122.1
    CNY:114.4
     RegEx 
    (?<=CNY:)\d+\.\d
    Result 
    CNY:100.2 
    USD:222.1
    USD:301.3
    HKD:122.1
    CNY:114.4

     

        这个例子里,要获取属于CNY的金额。子模式仅参与匹配过程,并不作为匹配结果输出。

     

     

        负反向预查的作用正好与反向预查相反,语法为在子模式内部前面增加"?<!"。

     

        比如上面例子,如果RegEx为(?<!CNY:)\b\d+\.\d,则会获取不属于CNY的金额.

    展开全文
  • \W可以配置 字母数字,等价于[^a-zA-Z0-9] 。 测试实例 被匹配字符串 private static final String test1 = "a12.a,df3.1d-2tt.*"; 匹配公式3 匹配公式 String expression3 = "\\W"; 匹配结果 ...
  • 空白字符匹配符 \s \S可以配置" "字符的 测试实例 被匹配字符串 private static final String test1 = "a1 2ad f31d-2 tt"; 匹配公式1 匹配公式 String expression1 = "\\s"; 匹配结果 注:匹配...
  • 正则表达式之贪婪匹配贪婪匹配

    万次阅读 多人点赞 2018-10-07 16:14:06
    在前面正则表达式匹配规则里,提到了 .* . :匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式 * :匹配0个或多个 使用 .* 的话就可以匹配任意长度的任意字符,但是有...
  • 在基础正则中,那些能匹配多次的量词都会匹配最长内容。这种尽量多匹配的行为称为"贪婪匹配"(greedy match)。 例如字符串"aa1122ccbb",用正则表达式a.*c去匹配这个字符串,其中的.*将直接从第二个字母a开始匹配到...
  • 图像的二维匹配是两幅照片之间的特征点的匹配,但是立体匹配 也是两幅照片的匹配然后生成视差值,得到深度图,为什么前者就是二维匹配,而后者却叫立体匹配(立体也就意味是三维匹配),这是为什么呢,三维匹配不...
  • 空三匹配和密集匹配区别与联系

    千次阅读 多人点赞 2015-03-12 22:09:28
    首先从理论上分析空三匹配和密集匹配区别和联系,然后从测绘学的后方交会前方交会原理出发,通过一个形象的例子说明二者的区别
  • 稀疏匹配和稠密匹配

    千次阅读 2020-04-20 16:19:12
    学习双目视觉总是对一些概念模糊不清,例如稀疏匹配和稠密匹配,今天来总结一下。 稀疏匹配 基于特征(点、线)的匹配称作稀疏匹配。 在立体图像对中识别兴趣点而后在两幅图像中匹配相对应的点。 识别兴趣点 在图像...
  • 贪婪模式和非贪婪模式指的是在正则匹配过程中的行为,在贪婪模式下,匹配最长的匹配值。非贪婪模式下,匹配最短的匹配值。 不是所有的NFA都支持非贪婪模式匹配。  JAVA的Pattern支持贪婪和非贪婪模式,通过不同的...
  • 正则表达式规则,以及贪婪匹配贪婪匹配
  • 共轭匹配和无反射匹配区别

    千次阅读 2020-06-09 17:11:47
    无反射匹配主要说的是传输线之间的匹配,它要做的是两段传输线的特征阻抗不同,利用匹配网络匹配,或者阻抗匹配到一段传输线的特征阻抗,像上图中的,就必须输入输出端口都做匹配,才是无反射的。 而共轭匹配
  • vim贪婪匹配贪婪匹配

    千次阅读 2014-10-29 16:47:39
    vim中的匹配实在是不如perl好用,一直想实现贪婪匹配,今天偶然发现可以用量词匹配来实现,具体可以看:h /\{ \{n,m} Matches n to m of the preceding atom, as many as possible \{n} Matches n of the ...
  • 正则匹配行与非匹配

    千次阅读 2019-06-14 15:50:56
    正则匹配行与非匹配匹配非行 ^(?!.*asd).*$ 此正则可以匹配不包含asd 的字符串 匹配行 ^(?=.*asd).*$ 这个就比较简单了,一般都是匹配包含的字符串,此处仅做对比 ...
  • 图像匹配的方法主要分为基于灰度值相关基于特征提取。 基于像素匹配: 基于灰度值相关的方法直接对原图模板图像进行操作,通过区域属性(灰度信息或频域分析等)的比较来反映他们之间的相似性。基于灰度的...
  • 1.4 正则表达式【匹配非数字】

    千次阅读 2019-10-01 11:45:03
    \D可以配置数字,等价于上一节中的 [^0-9] 。 测试实例 被匹配字符串 private static final String test1 = "a12adf31d2tt"; 匹配公式3 匹配公式 String expression3 = "\\D"; 匹配结果 匹配公式4 ...
  • 正则表达式--递归匹配贪婪匹配与分组替换 1. 表达式的递归匹配 有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况。比如, 使用表达式 "/( [^)]* /)" 或者 "/( .*? /)" 可以匹配一对小...
  • 1、删除匹配行 如果需要删除的语句分布在全文,则使用全局符号 g : g /Error/d 作用:删除全中包含Error的行 g 表示全文,d表示删除行, /Error/ 表示包含Error特定行 ...2、删除非匹配行 删除不匹配行使用g...
  • 并联匹配和串联匹配的原理选择

    千次阅读 2019-01-17 14:54:49
    串,并联终端匹配原理1.并联终端匹配的理论出发点是在信号源端阻抗很小的情况下,通过增加并联电阻使负载端输入阻抗与传输线的特征阻抗相匹配,达到消除负载端反射的目的。实现形式分为单电阻和双电阻两种形式。并联...
  • java中正则匹配贪婪模式和非贪婪模式实例贪婪模式和非贪婪模式指的是在正则匹配过程中的行为。 贪婪模式:匹配最长的匹配值 非贪婪模式:匹配最短的匹配值 java中的Pattern支持贪婪和非贪婪模式,通过不同的表达式...
  • 精确匹配: 写法: /^(你要匹配的内容)$/ //判断后缀名 //匹配域名后缀的实例 var name1 = /^(art|auto|beer|com|cn|co|cc|chat|club|cool|city|center|cloud|company|design|edu|email|fit|fund|fashion|today|gov|...
  • 正则表达式匹配非空中文

    万次阅读 2016-12-30 11:07:26
    正则表达式验证非空中文(包含繁体中文)表达式如下:匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包含汉字): [^\x00-\xff]实例: ; charset=utf-8"/> <script ty
  • 正则表达式的完全匹配和部分匹配

    千次阅读 2016-02-04 15:32:01
    在Matcher类中有matches、lookingAtfind都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动...
  • #!/usr/local/bin/python #coding:GBK import re fopen=open(r'/tmp/1.txt','r') f=fopen.read().strip() print "输出1.txt文件内容" print f print "-----------------------------...print "贪婪匹配,re.S('.'匹配
  • opencv 中的暴力匹配和FLANN匹配

    千次阅读 2019-07-06 09:54:09
    最近看图像匹配的内容,特地比较了暴力匹配和基于FLANN的匹配方法,按照理论上讲,FLANN更快一些,但是程序结果显示暴力匹配的方法更快,由于我只用了两幅图像,可能是实验样本太少的缘故吧,代码如下: #include<...
  • 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python贪婪和非贪婪 正则表达式通常用于在文本中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,613,497
精华内容 1,045,398
关键字:

匹配和非匹配的区别