Java正则表达式学习

sdjasj

正则表达式基础

image-20220216145536306

image-20220216145548834

image-20220216145610336

注意:java中正则表达式里"\“本身需要转义,因此要匹配”?“需要表达式”\\?“而不是”\?"

在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。

在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

image-20220216145915431

image-20220216150018227

image-20220216150637142

捕获组

简介

  • 捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建

  • 例如,正则表达式 (dog) 创建了单一分组,组里包含"d",“o”,和"g"。

  • 捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

    • ((A)(B©))
    • (A)

    • (B©)

    • ©

  • ((A)|(B)|©)匹配A,B,C其中一个

命名捕获组

  • 格式
1
(?<name>.....)

若Matcher对象匹配成功,使用Matcher对象的group(“name”)方法即可返回该捕获组内容

  • 例子
1
2
3
4
5
private String dataRe = "(?<date>(?<year>\\d{1,4})/(?<month>\\d{1,2})/(?<day>\\d{1,2}))";
Pattern p = Pattern.compile(dataRe);
Matcher m = p.matcher("2022/2/18");
m.find();
System.out.println(m.group("year")); //输出2022

数量匹配符匹配模式

  • 贪婪模式(Greedy):遇到满足的一直匹配,直到无法匹配
  • 勉强模式(Reluctant):以?结尾,匹配最少字符

image-20220216152228868

String类里的正则表达式方法

image-20220216144425795

regex库

Pattern 对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为Pattern 对象,然后再利用该Pattern 对象创建对应的 Matcher 对象。执行匹配所涉及的状态保留在 Matcher 对象中,多个 Matcher 对象可共享同一个Pattern 对象。

1
2
3
4
5
6
7
8
9
10
//模式串
String pattern = "waitToCompile"
//待匹配对象
String line = "WaitToMatch"

// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);

// 现在创建 matcher 对象
Matcher m = r.matcher(line);

Matcher常用方法

Modifier and Type Method and Description
int end()返回最后一个字符匹配后的偏移量。
int end(int group)返回在上次匹配操作期间由给定组捕获的子序列的最后一个字符之后的偏移量。
int end(String name)返回给定捕获子序列的最后一个字符之后的偏移量 named-capturing group 以前的匹配操作期间。
boolean find()尝试找到匹配模式的输入序列的下一个子序列。
boolean find(int start)重新设置该匹配器,然后尝试从指定的索引开始找到匹配模式的输入序列的下一个子序列。
String group()返回与上一个匹配匹配的输入子序列。
String group(int group)返回在上一次匹配操作期间由给定组捕获的输入子序列。
String group(String name)返回给定捕获的输入子序列 named-capturing group 以前的匹配操作期间。
int groupCount()返回此匹配器模式中捕获组的数量。
boolean hitEnd()如果在匹配器执行的最后一次匹配操作中输入的结尾被搜索引擎命中,则返回true。
boolean lookingAt()尝试将输入序列从区域开头开始与模式相匹配。
boolean matches()尝试将整个区域与模式进行匹配。
  • 標題: Java正则表达式学习
  • 作者: sdjasj
  • 撰寫于: 2022-02-18 09:20:42
  • 更新于: 2023-01-24 10:23:22
  • 連結: https://redefine.ohevan.com/2022/02/18/Java正则表达式学习/
  • 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
 留言