java--正则表达式、Pattern和Matcher类

本文深入探讨了正则表达式的应用,从基本概念到高级技巧,涵盖了常用的字符、字符类、边界匹配器和数量词等规则。通过实例演示了如何使用正则表达式进行字符串匹配,包括验证用户名和查找特定模式的单词。

正则表达式、Pattern和Matcher类

正则表达式

  正则表达式也就是用特殊符号来表达的式子,我们可以用这个表达式来匹配字符串,如:判断我们输入的密码是否正确符合长度不小于6,不大于15之类的规则。

正则表达式的常用组成规则

  这些规则字符java.util.regex Pattern类中
字符x 字符 x 举例:'a'表示字符a
\\ 反斜线字符
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
字符类[abc] a或b或c其中一个(简单类)
[ ^abc ] 任何字符,除了a或b或c其中一个(否定)
[a-zA-Z] a到z或A到Z中的某一个,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括,它们中的某一个
预定字符类. 字符,用表示 \.
\d 数字,它就是[0-9]的另一个表示形式
\w 单词字符,它就是[a-zA-Z_0-9]的另一个表示形式
边界匹配器^ 行的开头
$ 行的结尾
\b 单词边界,也就是不是单词字符的地方,如:hello world?haha;xixi
数量词X? X,一次或一次也没有 比如""空串 就是没有
X* X,零次或多次 ,大于等于1次都算多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

代码演示

验证用户名,用户名必须是6-16位之间的字母下划线或者数字。
public class Check {
    public static void main(String[] args) {
// 正则表达式中的[1-9a-zA-Z]表示开头不为零,只在1到9,a到z,A到Z之间任一个字符
//[0-9a-z_A-Z]{5,14}表示字符为1到9,a到z,A到Z,下划线( _ )之间出现至少 5次,但是不超过14次,因为要判断最后一位元素和第一个元素,因此少了2个元素的判断,也就是说中间元素出现的次数为]{5,14}。
//[0-9a-zA-Z]表示最后一位元素只在0到9,a到z,A到Z之间任一个字符
        String str="[1-9a-zA-Z][0-9a-z_A-Z]{5,14}[0-9a-zA-Z]";
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String s=sc.next();
    // 字符串与正则表达式匹配,matches()方法用来匹配字符串,匹配成功返回true
        boolean matches = s.matches(str);
        System.out.println("是否正确:"+matches);
    }
}

结果

请输入用户名:
gdhsjkfkduiopsgh
是否正确:true

Pattern和Matcher的概述

  我们也可以通过模式器(Pattern)和匹配器(Matcher)来使用正则表达式。
//它们的调用顺序为:
		//获取模式器
		Pattern p = Pattern.compile(正则表达式);
		//获取匹配器
		Matcher m = p.matcher(匹配的字符串);
		//匹配字符串,返回布尔值,匹配成功返回true
		boolean b = m.matches();
//找到匹配的字符串,最后这两个必须一起用,找到元素才能返回元素,
//每用一次find,就用一次group,要是你不想返回字符串,也可以不写最后这两个。
		m.find();
		//返回找到的字符串
		String g=m.group();

代码演示

获取下面这个字符串中由三个字符组成的单词

da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?

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

public class Find {
    public static void main(String[] args) {
// \\b表示单词边界,也就是不是字母的地方,这串字符刚好都是小写字母,
//所以范围在[a-z],因为要找的是三个字母组成的单词,
//因此写上{3}表示刚好[a-z]范围内出现三次字母
        String str="\\b[a-z]{3}\\b";
        String s="da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
        //模拟器把正则表达式给装起来
        Pattern cm = Pattern.compile(str);
        //匹配器把字符串拿过来匹配
        Matcher m = cm.matcher(s);
  //匹配成功返回true,这里返回false,因为这个表达式是找三个字母组成的单词,
  //而这里的s是一长串字符串,因此不匹配
        boolean ms = m.matches();
        System.out.println("匹配情况:"+ms);
        //循环找符合式子的单词,找到就输出
        while( m.find()){
            String g = m.group();
            System.out.println("三个字符组成的单词有:"+g);
        }

    }
}

结果

匹配情况:false
三个字符组成的单词有:jia
三个字符组成的单词有:jin
三个字符组成的单词有:yao
三个字符组成的单词有:xia
三个字符组成的单词有:wan
三个字符组成的单词有:gao
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值