$0 $1 \1 \2在Java正则中到底什么意思

这篇博客介绍了Java正则表达式中$0和$1的含义。文章通过`Pattern & Matcher`的概念,展示了如何进行正则匹配,并通过demo1和demo2演示了实际应用。在解释中指出,Java正则匹配依据小括号分组,$0代表整个匹配内容,而$1等代表各组匹配的结果。$0 $1的使用在字符串替换时尤其常见,但它们仅对应第一次出现的匹配项。
部署运行你感兴趣的模型镜像

Java正则

Pattern & Matcher

demo1

在这里插入图片描述

demo2

在这里插入图片描述

说明

java 中的正则匹配以小括号为依据,第一个小括号为第一组,第二个为第二组。默认正则有一个第0组

$0 & $X

以组匹配出的结果我们可以用$0 $1…依次来代替,具体参考如下例子。
在这里插入图片描述
注:

$0 $1只代表第一次出现的大写字母,上述(在大写字母前或后加_)功能的实现是因为String的repalaceAll底层有循环依次做正则匹配

$ \实例

1、在 Java 字符串的:
public String replaceFirst(String regex, String replacement)
public String replaceAll(String regex, String replacement)
两方法的第二个参数中是可以用 $1, $2 ... 来引用第一个参数的括号分组的,简单 Java 示例代码如下:
"abc def".replaceFirst("(\\w+)\\s+(\\w+)", "$2 $1");  // 结果为 def abc
"abc def aaa bbb".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1");  // 结果是 def abc bbb aaa

2、在正则表达式外是用 $1, $2 ... 来进行 后向引用,如果是在正则表达式中就需要用 \1, \2 ... 的形式来进 后向引用。

下面例子,替换重复出现的两位数及之间的内容:
"xx12abcd12345".replaceAll("(\\d{2}).+?\\1", "");  // 结果为 xx345
3、案例3
x.replaceAll("(.)\\1+", "$1$1").replaceAll("(.)\\1(.)\\2", "$1$1$2")
"(.)\\1+"此正则参数代表2次以上匹配
"(.)\\1(.)\\2"此正则参数代表配AABB型
整个案例的含义为:
1. 三个同样的字母连在一起,去掉一个的就好啦:比如 helllo -> hello
2. 两对一样的字母(AABB型)连在一起,去掉第二对的一个字母就好啦:比如 helloo -> hello

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

Java 中,可以使用正则表达式来匹配 01。以下是几种不同场景下使用正则表达式匹配 01 的示例: #### 匹配单个字符为 01 如果要匹配单个字符是 01,可以使用字符类 `[01]`。以下是示例代码: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatchZeroOrOne { public static void main(String[] args) { String input = "01230"; String regex = "[01]"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println("Matched: " + matcher.group()); } } } ``` 在上述代码中,`[01]` 这个正则表达式表示匹配单个字符,该字符要么是 0,要么是 1。通过 `Pattern` 和 `Matcher` 类的配合,找出输入字符串中所有匹配的部分。 #### 匹配字符串仅由 01 组成 如果要匹配一个字符串仅由 01 组成,可以使用 `^[01]+$` 这个正则表达式。其中 `^` 表示字符串的开始,`[01]` 表示字符是 01,`+` 表示前面的字符类出现一次或多次,`$` 表示字符串的结束。示例代码如下: ```java public class MatchZeroOrOneString { public static void main(String[] args) { String input1 = "0101"; String input2 = "012"; String regex = "^[01]+$"; System.out.println(input1.matches(regex)); System.out.println(input2.matches(regex)); } } ``` 在这个例子中,使用 `String` 类的 `matches` 方法来判断输入字符串是否完全匹配正则表达式。 #### 匹配 01 出现 0 次或 1 次 如果要匹配 01 出现 0 次或 1 次,可以使用 `[01]?` 这个正则表达式。`?` 表示前面的字符类出现 0 次或 1 次。示例代码如下: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatchZeroOrOneOccurrence { public static void main(String[] args) { String input = "a0b1c"; String regex = "[01]?"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); while (matcher.find()) { if (!matcher.group().isEmpty()) { System.out.println("Matched: " + matcher.group()); } } } } ``` 上述代码通过正则表达式 `[01]?` 找出输入字符串中 01 出现 0 次或 1 次的部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值