zoukankan      html  css  js  c++  java
  • perl学习之:肯定匹配和否定匹配

    tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力
    m/ /  s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力

    $string = "25abc8";
    $string =~ /abc(?=[0-9])/;
    (?=pattern) 前看声明,如果正则表达式在下一次匹配 pattern 风格,就开始匹配,而且不影响匹配效果.如/w+(?= )/将匹配制表符是否恰好在一个字w+后面出现,并且制表符不添加到$&的值中;
    $matched = $&; # $&为已匹配的模式,此处为abc,而不是abc8
    $n=$pom=~m/fish/;(这里的$n是对“$pom=~/fish/"的判断,如有fish就回1,没有就回空)
    在内部,m//g会保存一个“匹配位置”的变量,表示这次的m//g匹配到了什么位置,以便下次运行时从该处继续开始。(这个位置可以通过pos函数获得,这里就不多说了。)

    $_ = "abc";
    print "a" if /a/g;
    print "b" if /b/g;
    # 输出结果:ab
    结果是正确的。如果将语句换个位置呢?
    $_ = "abc";
    print "b" if /b/g;
    print "a" if /a/g;
    # 输出结果:b
    可见,第二次的模式 a 没有匹配。其实可以想到,第一次的m/b/g匹配后,匹配位置已经指向了字符串中的下一个位置c,第二行的m/a/g继续从c开始匹配,当然不会匹配到任何东西。

    while("balata"=~/.a/g){
    $match=$&;
    print("$match ");
    }
    结果为:
    ba
    la
    ta
    当使用了选项g时,可用函数pos来控制下次匹配的偏移:
    $offset=pos($string);
    pos($string)=$newoffset;

    /pattern/ 结果

    . 匹配除换行符以外的所有字符

    x? 匹配 0 次或一次 x 字符串

    x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数

    x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数

    .* 匹配 0 次或一次的任何字符

    .+ 匹配 1 次或多次的任何字符

    {m} 匹配刚好是 m 个 的指定字符串

    {m,n} 匹配在 m个 以上 n个 以下 的指定字符串

    {m,} 匹配 m个 以上 的指定字符串

    [] 匹配符合 [] 内的字符

    [^] 匹配不符合 [] 内的字符

    [0-9] 匹配所有数字字符

    [a-z] 匹配所有小写字母字符

    [^0-9] 匹配所有非数字字符

    [^a-z] 匹配所有非小写字母字符

    ^ 匹配字符开头的字符

    $ 匹配字符结尾的字符

    d 匹配一个数字的字符,和 [0-9] 语法一样

    d+ 匹配多个数字字符串,和 [0-9]+ 语法一样

    D 非数字,其他同 d

    D+ 非数字,其他同 d+

    w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样

    w+ 和 [a-zA-Z0-9]+ 语法一样

    W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样

    W+ 和 [^a-zA-Z0-9]+ 语法一样

    s 空格,和 [ f] 语法一样

    s+ 和 [ f]+ 一样

    S 非空格,和 [^ f] 语法一样

    S+ 和 [^ f]+ 语法一样

     匹配以英文字母,数字为边界的字符串

    B 匹配不以英文字母,数值为边界的字符串

    a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串

  • 相关阅读:
    js 控制页面跳转的5种方法
    弹性盒
    js中变量声明有var和没有var的区别
    解决Cannot read property 'style' of null中样式问题
    JS中用for循环解决重复定义的问题
    博客第一天
    jQuery 无缝轮播
    随鼠标移动
    倒计时
    轮播图
  • 原文地址:https://www.cnblogs.com/chip/p/4273888.html
Copyright © 2011-2022 走看看