zoukankan      html  css  js  c++  java
  • 正则表达式--位置匹配和组

    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]*$

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

  • 相关阅读:
    Windows 环境 cygwin 安装 SSH
    看见上帝的 10 个公式……
    移动平均
    分位数
    算术平均、几何平均、调和平均、平方平均和移动平均
    平均数、中位数和众数及它们之间的关系
    10 个超炫绘制图表图形的 Javascript 插件【转载+整理】
    “服务器推”技术【转载+整理】
    网站数据监控监测系统
    Active Directory 域服务(AD DS)
  • 原文地址:https://www.cnblogs.com/renjing/p/regex-flag.html
Copyright © 2011-2022 走看看