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

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

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/renjing/p/regex-flag.html
Copyright © 2011-2022 走看看