为了账号安全,请及时绑定邮箱和手机立即绑定

Java--正则表达式用法

标签:
Java

图片描述
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
Java 正则表达式和 Perl 的是最为相似的。
java.util.regex 包主要包括以下三个类:
Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

1.正则表达式获取字符串中数字字符串和字母字符串的个数,以及统计字符个数:

package com.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式获取字符串中数字字符串和字母字符串的个数,以及统计字符个数
 * @author dell
 *正则表达式的原理:通配符匹配技术
 *  \d  表示匹配任何数字
 *  \D  表示匹配任何数字之外的字符
 *  \w  表示匹配任何ASCII单字符
 *  {n,m}  表示
 */
public class NumberStringTest {

    public static void main(String[] args) {
        String u="wedbnwy32iy232344236tegvewjhn23843872738349348wngeijhwj84378438974324g2nf642";
        //正则表达式
        Pattern p = Pattern.compile("\\d{2,}");
        Matcher m = p.matcher(u);
        int i=0;
        while(m.find()){
            System.out.println(m.group());
            i++;
        }
        System.out.println("共有"+i+"个数字字符串");

        Pattern p1 = Pattern.compile("\\D{2,}");
        Matcher m1 = p1.matcher(u);
        int j=0;
        while(m1.find()){
            System.out.println(m1.group());
            j++;
        }
        System.out.println("共有"+j+"个字母字符串");

        Pattern p2 = Pattern.compile("\\w");
        Matcher m2 = p2.matcher(u);
        int k=0;
        while(m2.find()){
            System.out.print(m2.group());
            k++;
        }
        System.out.println("\n共有"+k+"个字符");
    }

}

2.正则表达式判断是否是ip地址

package com.regex;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式判断是否是IP地址 IP可能的范围是0-255.0-255.0-255.0-255
 * 
 * @author dell
 *
 */
public class RegexIPAddress {
    public static class IPAdd {
        public boolean isIP(String addr) {
            //判断IP地址的长度 1.1.1.1------255.255.255.255
            if (addr.length() < 7 || addr.length() > 15 || "".equals(addr)) {
                return false;
            }
            // 判断IP格式和范围
            String rexp = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
            Pattern pat = Pattern.compile(rexp);
            Matcher mat = pat.matcher(addr);
            boolean ipAddress = mat.find();
            return ipAddress;
        }
    }

    public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入一个IP地址:");
       String ip = scanner.nextLine();

       IPAdd ipAdd = new IPAdd();
       //判断是否是IP地址
       System.out.println(ipAdd.isIP(ip));
    }

}

3.使用正则表达式从一个给定的字符串中找到数字串:

package com.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 使用正则表达式从一个给定的字符串中找到数字串
 * @author dell
 *
 */
public class RegexMatches {
    public static void main(String[] args) {
        //按制定模式在字符串查找
        String line = "我从山里千里迢迢来,翻山越岭,如今掐指一算行走了3578766米,完成了一次有趣的徒步旅行!";
        String pattern = "(\\D*)(\\d+)(.*)";
        //创建Pattern对象
        Pattern r = Pattern.compile(pattern);
        //创建Matcher对象
        Matcher m =r.matcher(line);
        if(m.find()){
            System.out.println(m.group(0));
            System.out.println(m.group(1));
            System.out.println(m.group(2));
            System.out.println(m.group(3));
            System.out.println("字符串个数:"+m.groupCount());
        }else{
            System.out.println("NO MATCH");
        }
    }
}

4.使用正则表达式对单词“imooc”出现在输入字符串中出现次数进行计数:

package com.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 使用正则表达式对单词“imooc”出现在输入字符串中出现次数进行计数
 * @author dell
 *  \b  匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",
 *  但不匹配"verb"中的"er"。
 *  public int start() 返回以前匹配的初始索引
 *  public int end() 返回最后匹配字符之后的偏移量。
 */
public class RegexMatches1 {
    private static final String REGEX = "\\bimooc\\b";
    private static final String input = "imooc,imooc是慕课网的域名,网址是:www.imooc.com";

    public static void main(String[] args) {
        Pattern p = Pattern.compile(REGEX);
        //获取matcher对象
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()){
            count++;
            System.out.println("Match number:"+count);
            System.out.println("start():"+m.start());
            System.out.println("end():"+m.end());
        }
    }

}

图片描述

如果你喜欢的话,记得点赞,请支持我!更多精彩,下回分解。

点击查看更多内容
21人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.5万
获赞与收藏
8507

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消