zoukankan      html  css  js  c++  java
  • 学习正则表达式

    参考视频

    参考博客1

    参考博客2

    字符组[]

    [0-9]           匹配0123456789
    [0-9a-f]       匹配0123456789abcdef
    [-09]           匹配 "-" "0" "9"三个字符
    排除性字符组[^...]
    [^0-5]         匹配非0~5的字符
    case[^e]   匹配cas+任意不为e的字符
    字符组简记法
    [\d]   = [0-9]
    [\D]  = [^0-9]
    [\w]  = [0-9a-zA-Z-]
    [\W] = [^0-9a-zA-Z-]
    [\s]匹配空白字符 (回车、换行、制表、空格)
    [\S]匹配非空白字符
    特殊的简记法:点号
    "."    匹配几乎所有任意字符  不能匹配换行符
    "\."   匹配点本身 
     [.]    匹配点本身
     
     
     
    量词
    作用:限定之前的字符出现的次数
    *  之前的字符可以出现0次到无穷多次          0~n
    + 之前的字符至少需要出现1次                    1~n
    ?之前的字符出现0次或至多只能出现1次      0~1
     
    //可选项元素
    //?表示可选项元素
    //用法看底下的例子
    July?.(fourth|4(th)?)
    July? 匹配 Jul 或者July  
    4(th)? 匹配4或者4th
    //也就是?前边的元素是可有可无的都可以匹配成功
    //可以匹配一下六种日期写法:
    July fourth  
     July 4th   
    July 4  
    
    Jul fourth  
     Jul 4th   
    Jul 4  

    匹配hr

    <hr( +size *= *[0-9]+)? *>
    可以匹配 
    <hr>
     <hr >
     <hr size=50>
     <hr size=50  >
      <hr size  =  50  >

     

    区间量词

    作用:具体规定字符的出现次数
    {min,max} 
    {min,}
    {number}
    * {0,}
    +{1,}
    ?{0,1}
    量词的局限
    量词只能规定之前字符或字符组的出现次数
    字符组出现的次数:(....)   (ac)+
    括号的用途:多选结构
    作用:表示某个位置可能出现的字符窜
    形式:(...|...|...|..)
    括号的用途:捕获分组
    作用:将括号内的子表达式捕获的字符串存放在匹配结果中,供匹配完成后访问
    形式:(...)
    string email="gaonanlvmm@gmail.com";
    string regex="(\\w+)@([\\w.]+)";

    group[0]=gaonanlvmm@gmail.com
    group[1]=gaonanlvmm; 
    group[2]=gmail.com;

    注意:
    1.只要使用了括号,就存在捕获分组 
    2.捕获分组按照开括号出现的从左至右的顺序编号。遇到括号嵌套的情况也是如此
    3.如果捕获分组之后存在量词,则匹配结果中,捕获分组保存的是子表达式最后一次匹配的字符串
    string email="gaonanlvmm@gmail.com";
    string regex="(\\w)+@([\\w.])+";

    group[2]=m; 
    group[3]=m;

    不捕获文本的括号不推荐
    如果正则表达式很复杂,或者需要处理的文本很长,捕获分组会降低效率
    作用:仅仅用来对表达式分组,而不把分组捕获的文本存入结果
    形式:(?:...)
    括号的用途:反向引用
    作用:在表达式的某一部分,动态重复之前的子表达式所匹配的文本
    形式: \1
    String regex = "<(\\w+)>[^<]+</(\\1)>";
     
     
    锚点
    作用:规定匹配的位置
    形式:\b  单词分节符锚点
    注意事项:  一侧是单词字符,另一侧是非单词字符
    单词字符通常指的是英文字符 数字字符,对中文不适用
    非单词字符通常指的是各种标点符号和空白字符
    cat0  cat猫 这两种不能正确识别
    ^  匹配一行的开头
     $ 匹配一行的末尾
    \A  匹配整个字符串的开头 \<
    \Z  匹配整个字符串的末尾 \>
    环视
    锚点对位置的判断不够灵活,环视对锚点的补充
    作用:应用子表达式对位置进行判断
    形式:

    (?=...)   肯定顺序环视   右侧文本能由子表达式匹配
    (?!...)    否定顺序环视    右侧文本不能由子表达式匹配
    (?<=...)   肯定逆序环视    左侧文本能由子表达式匹配
    (?<!...)   否定逆序环视    左侧文本不能由子表达式匹配

    jeff jeffrey  Jefferson
    jeff                  匹配jeff jeffrey  Jefferson
     jeff(?=rey)      匹配jeffrey  
      jeff(?!rey)       匹配jeff Jefferson
     
     
    see  bee  tee
    (?<s=)ee  匹配see
    (?<s!)ee 匹配bee  tee
     
    注意事项
    环视结构仅用于布尔判断,结构内的子表达式所匹配的文本,不会保存在整个表达式匹配的结果之中
    逆序环视结构对子表示存在限制
    perl,python:逆序环视结构中的子表达式必须为固定长度
    php,java :逆序环视结构中的子表达式可以不定长度,但必须有上限
    .NET  逆序环视结构中的子表达式完全没有限制
    环视应用实例
    修整数值
    要求:在数值中的合适位置插入逗号,将其修整为便于阅读的形式
    举例:1234567890 ->1,24,567,890
    肯定逆序环视
    左侧至少出现一位数字
    右侧 数字的位数必须是3的倍数
    (?<=\\d)(?=(\\d{3})+(?!\\d))
     
    匹配模式
    作用:改变某些结构的匹配规定
    形式:
    I:case Insensitive  不区分大小写
    S: SingleLine(dot All)  点号通配  .可以匹配任意字符
    M: MultiLine    多行模式  更改^ $的匹配规定 \A 和\Z则不受影响   
    X:  Comment  注释模式
     
     
    多行模式
    hello\nIT\n  
    正常情况下^IT$ 匹配失败
    多行模式   可以匹配成功
     
    注释模式
    作用:在正则表达式内部可以使用注释
    形式:注释以#开头,以换行符结束(或直到表达式的末尾)
    使用此模式后,会忽略正则表达式中的所有空白字符
    string str="gaonanlvmm@gmail.com";
    string regex="\\w+ #用户名\n"+"#"+"\\s+ #主机名";
    里边的空白字符 和#到\n或者#到行末的内容将被忽略 只是给阅读代码的人的提示
     
    模式的混合
    作用:同时使用多个模式
    形式:在编译正则表达式时,把表示模式的多个参数以竖线"|"连接起来
     
    模式的作用范围
    作用:精确控制各个模式的作用范围
    形式:在表达式中以 (?ismx)的方式启用模式,以 (?-ismx)的方式停用模式
    abc

    [?i]AB 可以匹配
    [?i]AB[?-i]C  不可以匹配

     
    模式的冲突
    如果在正则表达式内部,通过模式作用范围指定了模式。而在外部又指定了其他模式参数,则模式作用范围的优先级更高
     

     
     
  • 相关阅读:
    增加Tomcat内存大小
    JAVA中的JSON
    js判断中文字符长度
    2016总结
    JavaScript 字符串实用常用操作
    Java文件操作
    hadoop中hbase出现的问题
    static_cast静态类型转换指针导致Release程序随机崩溃报错
    解决: error C2236: 意外的标记“class”。是否忘记了“;”?
    游戏操作杆代码
  • 原文地址:https://www.cnblogs.com/0banana0/p/2490967.html
Copyright © 2011-2022 走看看