Java正则表达式

本文深入介绍了正则表达式的匹配规则,包括限定符、或运算符、字符类、元字符等,并提供了Java中使用Pattern和Matcher类进行正则匹配的示例。此外,还推荐了regex101.com网站作为正则表达式练习平台,帮助读者巩固和提升正则表达式技能。
摘要由CSDN通过智能技术生成

正则表达式

正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本

正则表达式的匹配规则

1.限定符
?:这个代表它前面的字符出现0次或者1次(就是?前面的字符可有可无)。
*:这个代表它前面的字符出现0次或者n次。
+:这个代表它前面的字符出现1次或者n次。
{}:这个代表它前面的字符出现你想要的多少次,eg:{2}出现2次,{2,6}出现2-6次,{2,}出现2次以上。
上面的限定符都是匹配单个字符,如果要匹配多个字符可以用()把需要匹配的多个字符扩起来。
2.“或”运算符
(a|b):这个表示要么匹配a,要么匹配b。
3.字符类
[]:方括号的内容代表要求匹配的字符只能取自它们。eg:[abc]+匹配所有abc的字符串。
    方括号里面还能写范围。eg:[a-zA-Z09]+匹配所有的英文字符和数字。
如果在方括号的前面有一个^号,则代表要求匹配除了^后面列出的所有字符eg:[^0-9]+代表所有的非数字字符(包括换行符)。
4.元字符
\d:数字字符
\w:单词字符
\s:空白符(包括Tab和换行符)
\D:非数字字符
\W:非单词字符
\S:非空白符
5.其他符
.*:任意字符(不包含Tab)。
^:匹配行首eg:^a只会匹配行首的a。
$:匹配行尾eg:a$只会匹配行尾的a。
贪婪与懒惰匹配:
*+{}在匹配字符串当中,会默认匹配尽可能多的字符,这就是贪婪匹配。
加?会把正则表达式中的贪婪匹配(默认)切换为懒惰匹配。
然后我给大家推荐一个练习正则表达式的网站
https://regex101.com/
这个网站进去之后上面的小横方框写的是正则表达式
下面是根据正则表达式匹配的字符

来喽,接下来看码

String content = "abc";//要匹配的字符串
        String pattern = "[a-z]{3}";//正则表达式
        boolean ismath = Pattern.matches(pattern,content);//通过Pattern函数判断是否含有正则表达式的子串
        System.out.println(ismath);

Pattern类与Matcher类

 java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。

Pattern是一个正则表达式经编译后的表现模式
Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查
//寻找字符中有多少个符合表达的匹配子串
        Pattern p = Pattern.compile("(JAVA|PATHON)");
        Matcher m = p.matcher("aaa2223bbJAVA23JAVA33BPATHONB");
        int i = 0;
        while(m.find()){
            i++;
        }
        System.out.println(i);

find的匹配

穿插.start和.end的使用

String a = "\\d+,";
        String b = "123,45-342,-543";
        Pattern c = Pattern.compile(a);
        Matcher e = c.matcher(b);
        System.out.println();
        System.out.println(e.find());//这里是找到了123,

        System.out.println(e.start());//返回当前匹配到的字符串在原目标字符串中的位置
        System.out.println(e.end());//返回当前匹配的字符串的最后一个字符在原目标字符串中的索引位置

        System.out.println(e.find());//这里是找到了342,
        System.out.println(e.find());//因为没有进行reset,下一次的find将不匹配之前找到的结果,所有这次的在剩余中没有找到相匹配的子串
        System.out.println();
        //但是如果进行了e.reset();进行处理,此时find会重新在前面重新查找。
        e.reset();
        System.out.println(e.find());//这里是找到了123,
        System.out.println(e.group());//表达123,
        System.out.println(e.find());//这里是找到了342,
        System.out.println(e.group());//表达342,
        System.out.println(e.find());//因为没有进行reset,下一次的find将不匹配之前找到的结果,所有这次的在剩余中没有找到相匹配的子串
        System.out.println();
        e.reset();
        System.out.println(e.group());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值