zoukankan      html  css  js  c++  java
  • [正则表达式]常用正则表达式实例

    1、选中被逗号(或其他符号)分割的字符串当中的某一个值

    69,23,69,88,695,69,69,6,765769fd969690,3242,969,69

    实例,选中以上字符串所有出现的69部分

    (69[,]?)|([,]?69)

    javascript

    var val  = "69";
    var exp  = new RegExp("(\b"+val+"\b[,]?)|([,]?\b"+val+"\b)","g");

    php

    $matches  =  array();
    $search   =  '69,23,69,88,695,69,69,6,765769fd969690,3242,969,69';
    $target   =  '69';
    $pattern  =  '/('.$target.'[,]?)|([,]?'.$target.')/';
    preg_match_all ($pattern, $search, $matches);

    2、运用环视功能为数字描点

    569836495

    实例,从数字的第1位起,每三位插入逗号以区分数位

    (?<=d)(?=(?:[d]{3})+)

    javascript,由于javascript只支持顺序环视,所以写法会跟其他语言有些区别

    var subject = "569836495";
    var exp     = /(d)(?=(d{3})+(?!d))/g;
    subject.replace(exp, "$1,");

    php

    $subject  =  '569836495';
    $target   =  ',';
    $pattern  =  '/(?<=d)(?=(?:[d]{3})+)/';
    preg_replace($pattern, $target, $subject);

     3.匹配引号当中的内容,内容包含转义引号

    "([^"]|(?<=\)")*"

     但是它不支持引号内包含\"这种形式的字符,因为第一个是为了转义第二个,而"事实上是边界来的,但是被上面的表达式识别成了第二个是为了转义"

     并且有很多引擎(如javascript)不支持逆序环视,好在用顺序环视也是可以表达出来的,只不过在写法上会复杂一些:

    "([^"\]|((?=\\)[\][\]|(?=\[^"])[\]|(?=\")[\]["]))*"

     此表达式由"号开始然后匹配正文,正文允许0到n个匹配,最后以"结束

     正文匹配分两部分:

      第一部分当遇到不是"和字符则直接匹配;

      第二部分当遇到"和字符时,符合子表达式(?=\\)[\][\]|(?=\[^"])[\]|(?=\")[\]["]才匹配;

      子表达式很简单:

       (?=\\)[\][\]:如果是连续两个\则匹配;

       (?=\[^"])[\]:如果是一个,并且后接字符不是"则匹配;

       (?=\")[\]["]:如果是"则匹配;

       这个表达式只适合NFA引擎,由于NFA引擎的工作原理,匹配是优先的,只有后面还有匹配规则,并且这个规则匹配不上的时候,前面的匹配才会把结果吐出来进行尝试回溯,

       所以子表达式当中(?=\\)[\][\]必须要在(?=\[^"])[\]前面,动动脑子想想为什么吧;

       4.去除字符串前后字符(trim)

    ^[suFEFFxA0]+|[suFEFFxA0]+$

       这个其实很容易理解,起始位接s+,或者s+接结束位都会被匹配;

  • 相关阅读:
    sql 生成随机数 以及不重复随机数
    值提供器 AND 模型绑定器
    web项目在iis配置好后不能正确访问问题集锦,以及IIS常规设置
    js
    性能优化
    MVC3;0问题与知识点
    EntityFramework
    MSSQL2008 临时总结文档2014
    py--使用__slots__
    py--使用@property
  • 原文地址:https://www.cnblogs.com/yiyide266/p/7199134.html
Copyright © 2011-2022 走看看