美文网首页
正则表达式学习

正则表达式学习

作者: 叶落清秋 | 来源:发表于2022-04-28 08:56 被阅读0次

    1. 基础语法

    • . - 除换行符以外的所有字符。
    • ^ - 字符串开头。
    • $ - 字符串结尾。
    • \d,\w,\s - 匹配数字、字符、空格。
    • \D,\W,\S - 匹配非数字、非字符、非空格。
    • [abc] - 匹配 a、b 或 c 中的一个字母。
    • [a-z] - 匹配 a 到 z 中的一个字母。
    • [^abc] - 匹配除了 a、b 或 c 中的其他字母。
    • aa|bb - 匹配 aa 或 bb。
    • {n} - 匹配 n次。
    • {n,} - 匹配 n次以上
    • {m,n} - 最少 m次,最多n次匹配
    • ? - 0 次或 1 次匹配 等价于{0,1}
    • * - 匹配 0 次或多次 等价于{0,}
    • + - 匹配 1 次或多次 等价于{1,}
    • (expr) - 捕获expr子模式,以 \1 使用它。

    ps: {n}{n,}{m,n}?*+只匹配前一个字符

    abc+ : 匹配 abc、abcc、 abccc等

    a[bc]+: 匹配ab、ac、abb、abc、acb等

    a(bc)+: 匹配abc、abcbc、abcbcbc等

    a|b|c+: 注意这个+与c绑定,实际匹配的是a、b、c、cc、ccc、cccc等

    ^abc : 匹配以abc开头的字符串

    .: 对应除换行符以外的所有字符,但只对应一个字符,.+ 匹配除换行符以外的所有字符

    2. 括号的用法

    () 是组,可以是表达式

    --() 匹配的是组,可以是多个字符,匹配保存结果,即产生数组保存对应的对个值,可以使用$1获取第一个匹配值
    (abc| bac| cba) 匹配abc或bac或cba,顺序固定
    -- (?)以?开头的为非获取匹配,只匹配不保存结果,即不产生数组
    tr(?=y|ies|ying|ied) 该方式等同于try|tries|trying|tried
    a(?=bc) 匹配以abc顺序出现的a                     (?<=bc)a  前置匹配,匹配以bca顺序出现的a
    a(?!bc) 匹配不以abc顺序出现的a   如:ac中的a       (?<!bc)a  前置匹配,匹配不以bca顺序出现的a   如:ca中的a
    
    

    [] 是定义匹配的字符范围

     -- [] 匹配单个字符
    [1-9] 匹配1到9的数字
    [135] 匹配1、3、5中的数字
    [?*+(a)]  注意,[]中特殊字符不需要转义即可使用,这里匹配?、*、+、(、a、)中的任一字符,并不是表达式
    []中有用的符号为:
    1. ^ 取反 ^a即除a以外的字符
    2. - 区间 a-z即 a到z的字母
    3. \ 匹配特殊字符: 换行(\n) 中文(\u4e00-\u9fa5)等
    

    {} 用来匹配的长度

    {n} - 匹配 n次。
    {n,} - 匹配 n次以上
    {m,n} - 最少 m次,最多n次匹配
    

    3. 优先级

    正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似

    运算符 描述
    \ 转义符
    (), (?:), (?=), [] 圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
    | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

    4.修饰符

    通常使用g/[1-9]/g

    修饰符 含义 描述
    i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
    g global - 全局匹配 查找所有的匹配项。
    m multi line - 多行匹配 使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
    s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

    5. 非贪婪

    *和 +限定符都是贪婪的,它们会尽可能多的匹配文字。但是加上?将变成非贪婪表达式、最小匹配

    <span> hello </span>
    <.*>    匹配<span> hello </span>
    <.*?>   匹配<span>
    

    相关文章

      网友评论

          本文标题:正则表达式学习

          本文链接:https://www.haomeiwen.com/subject/ffbryrtx.html