前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中正则表达式

Java中正则表达式

作者头像
会说话的丶猫
发布2021-03-09 12:17:22
2930
发布2021-03-09 12:17:22
举报
文章被收录于专栏:每日分享java架构小知识

一、常见的符号的介绍

1.1 预定义字符类

符号

说明

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

\

转义字符,比如"\\"匹配"\" ,"\{"匹配"{"。

 1.2 数量词

符号

说明

*

等价于{0,} 匹配0至多个在它之前的字符。例如正则表达式“zo*”能匹配“z”以及“zoo”;正则表达式“.*”意味着能够匹配任意字符串。

+

等价于{1,} 匹配前面的子表达式一次或多次。例如正则表达式9+匹配9、99、999等。

?

等价于{0,1} 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。此元字符还有另外一个用途,就是表示非贪婪模式匹配,后边将有介绍

{n}

匹配确定的 n 次。例如,“e{2}”不能匹配“bed”中的“d”,但是能匹配“seed”中的两个“e”。

{n,}

至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配“seeeeeeeed”中的所有“e”。

{n,m}

最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。

1.3 边界匹配符号

符号

说明

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

1.3 其他常见符号

[]的使用--或

说明

[]

匹配括号中的任何一个字符

[abc]

a、b 或 c(简单类)

[^abc]

任何字符,除了 a、b 或 c(否定)

[a-zA-Z]

a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]

d、e 或 f(交集)

[a-z&&[^bc]]

a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]]

a 到 z,而非 m 到 p:[a-lq-z](减去)

()的使用 -- 组

()

将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。捕获组可以通过从左到右计算其开括号来编号。

(\d)

第一组

((A)(B(C)))

第一组 ((A)(B(C))) 第二组 (A) 第三组(B(C)) 第四组(C)

  PS:更多其他符号,可参照 http://www.cnblogs.com/Mustr/p/6057159.html

二、常见的操作

2.1 匹配

    String matches()方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

  举例:

代码语言:javascript
复制
public static void checkQQ(){
        String qq = "123a45664";

        String regex = "[1-9]\\d{4,14}";

        boolean flag = qq.matches(regex);
        if(flag)
            System.out.println(qq+"...is ok");
        else
            System.out.println(qq+"... 不合法");
         
}             //不合法
代码语言:javascript
复制
      /*
    匹配
    手机号段只有 13xxx 15xxx 18xxxx

    */
    public static void checkTel()
    {
        String tel = "16900001111";
        String telReg = "1[358]\\d{9}";
        System.out.println(tel.matches(telReg));
    }

2.2 切割

     String split()方法; 根据给定正则表达式的匹配拆分此字符串。返回一个数组。

  举例:

代码语言:javascript
复制
    public static void splitDemo()
        {
    
        String str = "avg   bb   geig   glsd   abc";
        String reg = " +";//按照多个空格来进行切割
        String[] arr = str.split(reg);  
        System.out.println(arr.length);
        for(String s : arr)
        {
            System.out.println(s);
        }
    }        

  组group举例:

代码语言:javascript
复制
public static void splitDemo()
        {
    
        String str = "erkktyqqquizzzzzo";
        String reg ="(.)\\1+";//按照叠词来进行切割
            //可以将规则封装成一个组。用()完成。组的出现都有编号。
            //从1开始。 想要使用已有的组可以通过  \n(n就是组的编号)的形式来获取。
        String[] arr = str.split(reg);  
        System.out.println(arr.length);
        for(String s : arr)
        {
            System.out.println(s);
        }
    }  
     // er,ty,ui,o

2.3 替换

    String replaceAll(regex,str)方法; 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

      ps:如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

    举例:

代码语言:javascript
复制
    public static void replaceAllDemo()
    {
    
        String str = "wer1389980000ty1234564uiod234345675f";//将字符串中的数字替换成#。
 
        str = str.replaceAll("\\d{5,}","#");

        System.out.println(str);
    }
        // wer#ty#uio#f

    组group举例:

代码语言:javascript
复制
  public static void replaceAllDemo()
    {
    
        String str1 = "erkktyqqquizzzzzo";//将叠词替换成$.  //将重叠的字符替换成单个字母。zzzz->z
 
        str = str.replaceAll("(.)\\1+","$1");

        System.out.println(str);
    }
        // erktyquizo

2.4获取

      ----将字符串中的符合规则的子串取出。

    操作步骤:     1,将正则表达式封装成对象。     2,让正则对象和要操作的字符串相关联。     3,关联后,获取正则匹配引擎。     4,通过引擎对符合规则的子串进行操作,比如取出。

  举例:

代码语言:javascript
复制
public static void getDemo()
    {
        String str = "yin yu shi wo zui cai de yu yan";
        System.out.println(str);
        String reg = "\\b[a-z]{3}\\b";//匹配只有三个字母的单词

        //将规则封装成对象。
        Pattern p = Pattern.compile(reg);

        //让正则对象和要作用的字符串相关联。获取匹配器对象。
        Matcher m  = p.matcher(str);

        //System.out.println(m.matches());//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
        //只不过被String的方法封装后,用起来较为简单。但是功能却单一。

       // boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找。
       // System.out.println(b);
       // System.out.println(m.group());//用于获取匹配后结果。
        
        
        while(m.find())
        {
            System.out.println(m.group());
            System.out.println(m.start()+"...."+m.end());
                // start()  字符的开始下标(包含)
                //end()  字符的结束下标(不包含)
        }
    }        
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档