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

Posted 一品码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式--位置匹配和组相关的知识,希望对你有一定的参考价值。

1. 位置匹配

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

^    匹配文本开始位置

$    匹配文本结束位置

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

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

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

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)c\1   匹配 abcab

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

(a)(b)\1\2   匹配 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]*$

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

以上是关于正则表达式--位置匹配和组的主要内容,如果未能解决你的问题,请参考以下文章

循环通过 python 正则表达式匹配

正则表达式位置匹配攻略【转】

正则表达式表单验证实例代码详解

正则表达式位置匹配

正则表达式位置匹配

第二章 正则表达式位置匹配攻略