Java课程作业-【Java中的正则表达式】

Java课程作业-【Java中的正则表达式】

正则表达式

关于正则表达式,许多语言中都有涉及,这边简单罗列一些语法,权当复习。

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束**

以上是一些简单常用的元字符,下面介绍一些匹配重复方式的常用限定符

代码说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

以及当遇到除了某个类型,其他类型我都需要的情况时需要用到的反义代码

代码说明
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符

还有例如分枝条件、分组等我就不做阐述,可以具体看一下例子

0\d{2}-\d{8}|0\d{3}-\d{7}
这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

(0\d{2})[- ]?\d{8}|0\d{2}[- ]?\d{8}
这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用分枝条件把这个表达式扩展成也支持4位区号的。

零宽断言、贪婪懒惰等还没有真正学会,具体可以看一下我推荐的一个教程,也可以去搜索网络上关于正则表达式更具体的内容!!初学请多多包涵!
正则表达式30分钟入门教程
作者:deerchao

Java正则表达式

java.util.regex 包主要包括以下三个类:

Pattern 类
Pattern类是用来干嘛的呢,其实我们可以把他简单理解为就是一个正则表达式(就像File类一样,我们可以简单理解为它就是一个文件)。Pattern类没有公共的构造方法,这意味着我们不能直接new一个Pattern类的对象。在这个类中,提供了一个方法,名字叫compile,我们将正则表达式作为参数,传入这个方法中,就可以得到一个Pattern对象,我们可以将这个对象理解为就是传入的正则表达式。
Pattern类有一个实例方法,叫做matcher,这个方法接收一个参数,就是需要匹配的字符串,方法的返回值就是一个Mather对象。

Matcher 类
Matcher类又是用来干嘛的呢?Matcher这个单词翻译过来就是匹配器的意思,一个Matcher对象就是一个匹配器,我们通过这个匹配器,就可以操作正则表达式与字符串的匹配过程。操作的是哪个正则表达式和字符串呢?就是我们调用Pettern类的compile方法生成的Pettern对象,以及调用Pettern对象的matcher方法传入的要匹配的字符串。通过这个匹配器对象,我们可以控制字符串的匹配,查看匹配结果,甚至可以替换等便利的操作。

PatternSyntaxException类
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

引用的小测试代码–在Java中如何使用正则表达式

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test1 {
public static void main (String[] args) {

        // 使用Pattern类的compile方法,传入一个正则表达式,得到一个Pattern对象
        Pattern pattern = Pattern.compile("[0-9]+");
        // 匹配任意长度,且仅由0-9组成的字符串
        // 调用pattern对象的matcher方法,传入需要匹配的字符串, 得到一个匹配器对象
        Matcher matcher = pattern.matcher("xx2112Yim0cah342Yim0c21as");

        // 从字符串开头,逐一向后匹配,直到无法再匹配为止
        while (matcher.find()) {
            // 输出上一次匹配的内容
            //find方法的作用就是尝试从字符串中找到下一个匹配正则表达式的部分,若匹配成功,就返回true,否则返回false,而已经匹配的部分会被跳过
            System.out.print(matcher.group() + ":  ");
            // 输出上一次匹配的首尾索引
            System.out.println(matcher.start() + "->" + (matcher.end() - 1));
            //Matcher对象的group()方法返回上一次匹配的部分,而start()方法返回上一次匹配部分的开始索引,end()方法返回上一次匹配部分的结束索引+1的值。
        }
    }
}

输出结果:

2112: 2->5
0: 9->9
342: 13->15
0: 19->19
21: 21->22

在这里插入图片描述
在这里插入图片描述
matches 和 lookingAt 方法都用来尝试匹配一个输入序列模式。它们的不同是 matches 要求整个序列都匹配,而lookingAt 不要求。lookingAt 方法虽然不需要整句都匹配,但是需要从第一个字符开始匹配。

在这里插入图片描述
replaceFirst 和 replaceAll 方法用来替换匹配正则表达式的文本。不同的是,replaceFirst 替换首次匹配,replaceAll 替换所有匹配

在这里插入图片描述方法摘自Java 正则表达式 | 菜鸟教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值