Java正则表达式详细用法

版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 https://blog.csdn.net/lz199719/article/details/88753196

正则表达式是一串特定的字符,正则表达式有两个作用:

一.判断一个给定的字符串是否符合正则校验,返回一个特定的布尔值(true或false)

        1.  . 和 \
           . 在正则表达式中表示任意一个字符

           \ 在正则表达式当中表示转义字符,比如.在正则表达式当中表示任意一个字符,要是单纯的想要表达一个.的时候,就需

           要用到\转义字符来表示, \. 在java程序当中\也是被认为特殊字符,也需要进行转义,应该用\\.

        2.字符集合[]
          [] 用来描述一个单一的字符,方括号内部可以定义这个字符的内容,也可以描述一个范围
          [abc] abc中的任意一个字符
          [a-z] 小写字母当中a-z的任意一个单词
          [A-Z] 大写字母当中A-Z中的任意一个单词
          [0-9] 数字0-9中的任意一个数字
          [a-zA-Z0-9] a-zA-z0-9中的任意一个字符
          [a-z&&[^bc]] a-z中除了bc以外的任意一个字母
          
        3.预定义字符集
          \d 表示一个数字字符
          \w 表示任意一个数字字母_中的一个字符
          \s 表示空白字符  相当于[\t\n]
          \D 表示非数字字符
          \W 表示非数字字母下划线字符
          \S 表示非空白字符
          
        4.数量词
          x?  表示0个或者1个x
          x*  表示0个或多个x
          x+  表示1个到任意多个x,相当于大于等于1个x
          x{n} 表示可以有n个x
          x{n,} 表示可以有n到任意多个x
          x{n,m}表示n到m个x

        5.() 分组和捕获
          它有两个用途,可以将一段正则表达式括起来看做一个整体来对这个整体进行匹配,

          另一个用途就是捕获组的用法,可以通过()来做一个或者多个捕获组,根据某个捕获组来匹配给定的字符串当中的

          一部分内容,捕获组是根据(来进行匹配的,发现有一个(就对应一个捕获组,如果想让()里面的正则表达式单纯的

          当做一个整体来进行匹配,在(后面加上“?:”即可,就不会当做一个捕获组来进行处理

        6. ^ 和 $
          ^ 代表字符串的开始
          $ 代表字符串的结束

          可以对一个给定的字符串进行从头到尾的整体匹配

二.根据正则从给定的字符串当中提取出想要的内容,捕获组

        1.捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 

扫描二维码关注公众号,回复: 5995935 查看本文章

                    1     ((A)(B(C))) 
                    2     (A) 
                    3     (B(C)) 
                    4     (C) 
        2.捕获到组的内容可以在操作完成后从匹配器当中获取
        3.组零始终代表整个表达式
        4.与组关联的捕获输入始终是与组最近匹配的子序列,如果一个捕获组连续匹配了给定字符串中的多个子串,那么捕获组匹                       配器只会记录最后一个匹配到的子串,之前捕获到的都会被丢弃
        5.以 (?:) 开头的组是纯的非捕获组,它不捕获文本,也不针对组合计进行计数,只是当做一个普通的整体来对待

     示例代码:

String str = "[email protected]";
String regex = "^(\\w+)@\\w+(?:\\.(\\w+))+$";
//System.out.println(str.matches(regex));
			
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(str);
//System.out.println(matcher.matches());
matcher.find();
//遍历获取所有的捕获组内容
for(int i=0;i<=matcher.groupCount();i++){
	String string = matcher.group(i);
	System.out.println(string);
}

猜你喜欢

转载自blog.csdn.net/lz199719/article/details/88753196