Java学习笔记11正则表达式

正则表达式定义了字符串的模式,本质是一种特殊的字符串对象。

正则表达式也可以用来搜索,编辑或处理文本。

String 支持正则表达式方法

.replaceAll()

.replaceFirst()

.split()

.matches()

字符 说明 实例
^ 表达式开始
$ 表达式结尾
[358a-z] 一个符号,符号范围在3,5,8,a-z
\d === [0-9] 代表一位数字 \\d{9}
\d+ 代表1个数字,或多个数字 相当[0-9]{1,}
\d{3} 代表3个数字 相当于[9-9]{3}
[\u4e00-\u9fa5]{2,8} 代表2到8个汉字字符
* 代表0个或多个前边的符号 {0,} [a-z]*
. 代表1个任意的符号 str.matches(“^.+$”)
+ 代表1个或多个前边的符号{1,} \\d+
? 代表0个或1个前边的符号 {0,1}
{n} n个
{n,} n个或多个
{m,n} [a-zA-Z_0-9]{6,18} 和 \w{6,18}
\D [^0-9]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
| 匹配或正则表达式或,分组功能
() 分组
\s 代表空格 \s

在java中会自动判断开始和结尾。

使用正则表达式,将字符串中的数字转换为空。

		String str = "hello16java16mysql8html";
        System.out.println(str);
        //删除所有数字   \\d 代表数字   \\D 代表非数字(\\d取反)
        String s1 = str.replaceAll("\\d", "");
        System.out.println(s1);

运算结果如下
在这里插入图片描述

使用正则表达式,删除不是数字的内容。

		String str = "hello16java16mysql8html";
        System.out.println(str);
        //删除不是数字的内容
        String s1 = str.replaceAll("\\D", "");
        System.out.println(s1);

运算结果如下
在这里插入图片描述

删除首次出现的字符串匹配删除,+表示{1,}首次出现数字,无论几个都可以删除。

 String str = "hello16java16mysql8html";
        System.out.println(str);
        //删除首次出现的字符串匹配删除 \\d+
        String s1 = str.replaceFirst("\\d+", "");
        System.out.println(s1);

在这里插入图片描述

判断字符串有没有大写

String str = "hello16java16mysql8html";
        String str1 = "helGlo16jaAva16mysql8html";
        System.out.println(str);
        if (str.matches("^.*[A-Z].*$")) {
    
    
            System.out.println("有大写");
        } else {
    
    
            System.out.println("没大写");
        }


        System.out.println(str1);
        if (str1.matches("^.*[A-Z].*$")) {
    
    
            System.out.println("有大写");
        } else {
    
    
            System.out.println("没大写");
        }

在这里插入图片描述

判断字符串有没有数字

 		String str = "hello16java16mysql8html";
        System.out.println(str);
        System.out.println(str.matches("^.*\\d.*$"));

在这里插入图片描述

判断字符串有没有大小写字母

		String str = "hello16java16mysql8html";
        System.out.println(str);
        System.out.println(str.matches("^.*\\w.*$"));

在这里插入图片描述

判断字符串有没有中文

中文字符串的范围

在这里插入图片描述

 		String str = "hello16java16mysql8html";
        System.out.println(str);
        System.out.println(str.matches("^.*[\u4e00-\u9fa5].*$"));

在这里插入图片描述

判断电话号码

String phone = "13014577066";
        String pattern = "^1[3,5,8]\\d{9}$";
        if (phone.matches(pattern)) {
    
    
            System.out.println("yes");
        } else {
    
    
            System.out.printf("手机号:%s不是合法的手机号。 \n", phone);
        }

在这里插入图片描述

//是不是全英文
System.out.println("abc".matches("[a-zA-Z]+"));//true
System.out.println("ab c".matches("[a-zA-Z]+"));//false
System.out.println("ab123c".matches("[a-zA-Z]+"));//false
System.out.println("abDDDc".matches("[a-zA-Z]{1,}"));//true

贪婪模式

String h = "<div>hello-17</div><div>hello</div><span>java</span><div>java</div>";
        System.out.println(h);
        Pattern p = Pattern.compile("(<div>)(.*?hello.*?)(</div>)");
        Matcher m = p.matcher(h);
        while (m.find()) {
    
    
            System.out.println(m.group(2));
        }

在这里插入图片描述

加上?代表取消贪婪模式如不取消会以最大的长度进行计算。

String h = "<div>hello-17</div><div>hello</div><span>java</span><div>java</div>";
        System.out.println(h);
        Pattern p = Pattern.compile("(<div>)(.*hello.*)(</div>)");
        Matcher m = p.matcher(h);
        while (m.find()) {
    
    
            System.out.println(m.group(2));
        }

在这里插入图片描述

判断一个字符在字符串中出现的位置

		String s = "java-ajavajavajavabc-mysqljavascript-aajava 16ajav";
        String d = "java";
        Pattern p = Pattern.compile("java");
        Matcher m = p.matcher(s);
        int nn = 0;
        while (m.find()) {
    
    
            ++nn;
            //System.out.printf("%s ", m.group());
        }
        System.out.printf("%s 在 %s 中出现了 %d 次。%n", d, s, nn);

        int n = s.split("java").length > 0 ? s.split("java").length - 1 : 0;
        if (s.endsWith("java")) {
    
    
            n += 1;
        }
        System.out.println(n);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xxxmou/article/details/129148976
今日推荐