zoukankan      html  css  js  c++  java
  • 常用正则表达式

    限定符(贪婪)

    ab+c,可以匹配 abc、abbc 等,+ 号代表【前面的字符】必须出现【1次或多次】

    ab*c,可以匹配 ac、abc 等,* 号代表【前面的字符】必须出现【0次、1次或多次】

    ab?c,可以匹配 ac 或 abc,? 问号代表【前面的字符】只可以出现【0次、或1次】

    ab{2}c,可以匹配 abbc,{n} 代表【前面的字符】只可以出现【n次】

    ab{2,}c,可以匹配 abbc、abbbc 等,{n,} 代表【前面的字符】只可以出现【>=n次】

    ab{2,3}c,可以匹配 abbc 、 abbbc,{n,m} 代表【前面的字符】只可以出现【n次~m次(包括m、n)】

    懒惰限定符

    +?,重复1次或更多次,但尽可能少重复

    *?,重复任意次,但尽可能少重复

    ??,重复0次或1次,但尽可能少重复

    {n,}?,重复n次以上,但尽可能少重复

    {n,m}?,重复n到m次,但尽可能少重复

    同上,区别为尽可能少重复。例:(abc)+?d 匹配结果为 abcd,而(abc)+d 匹配结果为 abcd、abcabcd 等

    元字符

    ^,可以匹配字符串开始位置,^a --> 必须开头为a,如ab等

    $,可以匹配字符串结尾位置,b$ --> 必须结尾为b,如ab等

    . ,可以匹配除换行符以外的任意字符

    ,可以匹配单词边界(开始字符为单词与空格交界处),如 am 匹配 "i am fine" 中的 am

    w,可以匹配字母、数字、下划线(有时可汉字等?),基本等价于 [^A-Za-z0-9_]

    s,可以匹配任意的空白符(空格),如 wsw,可以匹配 a b

    d,可以匹配数字,如 ddd-ddd,可以匹配 123-456

    [abc],可以匹配包含括号内元素的字符,特殊有[a-z]、[A-Z]、[0-9]等

    (),分组,使括号里为一体

    |,或,有其一即可

    转义字符:

    ?=n,可以匹配任何其后紧接着字符串n的字符串

    反义字符

    B,可以匹配非单词边界(开始字符在单词内部),如 BinB 匹配 “i am fine” 中的 in

    W,可以匹配非字母、数字、下划线

    S,可以匹配非空白符(空格)

    D,可以匹配非数字

    [^abc],可以匹配除了ABC之外的字符

    ?!n,可以匹配任何其后没有紧接着字符串n的字符串

    模式修正符

    i:ignore 不区分大小写的匹配,如:/abc/i,匹配abc、ABc等

    g:global 表示全局匹配,是,则从左到右至结尾,每个符合条件均记录;否,则从左到右,第一个符合条件即结束

    m:more 将字符串视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束,如,g与m搭配使用

    >> var str = "abcggab
    abcoab";
    >> var preg1 = /^abc/gm;
    >> str.match(preg1)
    << (2) ["abc", "abc"] // 以abc开头的行
    >> var preg2 = /ab$/gm;
    >> str.match(preg2)
    << (2) ["ab", "ab"] // 以ab结尾的行

    s:特殊字符.(圆点)本是匹配除换行符 之外的任何单字符,此模式.中包含换行符,如/b./s,匹配b/na

    x:将模式中的空白忽略

    A:强制从目标字符串开头匹配,如:/abc/A,匹配abcde,不能匹配deabc

    D:如果使用$限制结尾字符,则不允许结尾有换行,如:/abc/D,不能匹配deabc

    U:只匹配最近的一个字符串,不重复匹配,相当于去贪婪,如:/a(.*?)c/ 和 /a.*c/U 等价,匹配abc

    e:配合函数preg_replace()使用

    JS使用正则表达式

    let reg = /正则规则/模式修正符;
    reg.match(value); // 这个方法有点像 exec,但 exec 是 RegExp 对象的方法;match 是 String 对象的方法

     RegExp对象

    https://www.w3school.com.cn/js/js_obj_regexp.asp

    let reg = new RegExp("正则规则","模式修正符");
    >> let patt1 = new RegExp("e");

    // 检索字符串中的指定值。返回值是 true 或 false
    >> patt1.test("The best things in life are free")
    << true

    // 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
    >> patt1.exec("The best things in life are free")
    << ["e", index: 2, input: "The best things in life are free", groups: undefined]

    // 既可以改变检索模式,也可以添加或删除第二个参数
    >> patt1.compile("d"); 
    << /d/
    >> patt1.test("The best things in life are free")
    << false

    匹配工具

    https://rubular.com/

    https://pan.baidu.com/s/19Yn49

    参考文章

    https://www.cnblogs.com/zery/p/3438845.html

     https://www.runoob.com/regexp/regexp-syntax.html

    http://www.360doc.com/content/18/0816/09/57605256_778653884.shtml

  • 相关阅读:
    flume和kafka整合(转)
    Flume目录
    Flume的安装配置
    HBase系统架构及数据结构(转)
    toolbar ,textfield,图片拉伸,Bundle
    poj 1017 Packets
    jQuery使用serialize(),serializeArray()方法取得表单数据+字符串和对象类型两种表单提交的方法
    Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护
    LintCode-落单的数 III
    LeetCode90:Subsets II
  • 原文地址:https://www.cnblogs.com/fogmisty/p/11692149.html
Copyright © 2011-2022 走看看