• 正则表达式--位置匹配和组


    1. 位置匹配

    正则中的匹配有两种,一种是匹配具体的字符,另一种是匹配特定的位置

    ^    匹配文本开始位置

    $    匹配文本结束位置

       匹配单词边界(单词开始位置或结束位置)

    校验操作时,是否使用 ^和$ 对校验操作没有影响

    获取、替换等操作时,一般不使用 ^和$

    String regex = "\bhello\b";
            String str = "xx hello,hello helloa ";
    
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
    
            while (matcher.find())
            {
                String group = matcher.group();
                System.out.println(group);
            }


    输出:

    hello
    hello

    2. 组

    正则使用 ( ) 表示一个组,组可以让若干字符形成一个小整体

    (ab)     匹配 ab

    (red|blue|green)   匹配 red 或者 blue 或者 green

    (red|blue|green) color   匹配 red color 或者 blue color 或者 green color

    在匹配时,组的当前 "取值" 会被临时保存起来,方便引用。可以使用 1 引用第一个组的当前"取值",最多可以引用九个不同的组:9

    (ab)c1   匹配 abcab

    ([ab])1   匹配 aa 或者 bb

    (a)(b)12   匹配 abab

    	String regex = "(a)(b)\1\2";
            String str = "abab";
           
            boolean match = Pattern.matches(regex, str);
            System.out.println(match);

    输出:

    true

    3.标记flag

     

    标记用来额外指定正则的匹配策略(标记可以不写在正则表达式内)

    i         大小写不敏感  insensitive(也可以理解成ignore)

    g        全局匹配  global 效果是可以依次的获取到和正则匹配的所有子字符串

    m       多行匹配  multiline 效果是^和$可以匹配一段文本中每行的开始和结束位置

    在Java中:

    在创建正则对象时可以通过 Pattern.compile(regex, flags)  指定标记

    使用Pattern.CASE_INSENSITIVE 常量表示 i

    使用Pattern.MULTILINE 常量表示 m

    正则操作默认就是全局匹配的

    String regex = "\bhello\b";
            String str = "xx Hello,heLLo helloa ";
     
            // Pattern pattern = Pattern.compile(regex);
            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
     
            while (matcher.find()) {
                String group = matcher.group();
                System.out.println(group);
            }


    输出:

    Hello
    heLLo

    4.常用正则表达式

    校验数字:^[0-9]*$

    校验整数或者小数:^[0-9]+([.][0-9]+){0,1}$

    校验qq号:[1-9][0-9]{4,}

    校验手机号:  ^1[34578]d{9}$

    校验身份证:(^d{15}$)|(^d{18}$)|(^d{17}(d|x|X)$)

    校验日期(格式:yyyy-mm-dd,已考虑平闰年):^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

    校验email地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$

    校验URL:^[a-zA-z]+://[^s]*$

    注意:以上常用正则并不保证完全满足需求,使用前请充分测试

  • 相关阅读:
    表单提交textarea内容,第一次获取不到值,第二次才能获取到的解决方法:
    连接oracle数据库报错:TNS-12516 TNS:listener could not find available handler with matching protocol stack解决方法
    【BZOJ 1272】 1272: [BeiJingWc2008]Gate Of Babylon (容斥原理+卢卡斯定理)
    【BZOJ 3456】 3456: 城市规划 (NTT+多项式求逆)
    【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)
    【BZOJ 4555】 4555: [Tjoi2016&Heoi2016]求和 (NTT)
    【BZOJ 4503】4503: 两个串 (FFT)
    【BZOJ 3771】 3771: Triple (FFT+容斥)
    【BZOJ 3160】 3160: 万径人踪灭 (FFT)
    【UOJ 34】 #34. 多项式乘法 (FFT)
  • 原文地址:https://www.cnblogs.com/renjing/p/regex-flag.html
Copyright © 2020-2023  润新知