gpt4 book ai didi

java - 正则表达式 - 可选择捕获 2 组

转载 作者:行者123 更新时间:2023-12-01 10:49:02 25 4
gpt4 key购买 nike

我有一个包含例如的字符串。 1a2b。数字为 1 至 9,字母 (a|b) 为常数。我想要一个查找“1a”和“2b”的正则表达式,其中任一组都是可选的。

我有这个...

    String description = "bla bla bla: 1a2b more bla bla bla";
Pattern pattern = Pattern.compile("([1-9]a)([1-9]b)");
Matcher matcher = pattern.matcher(description);
if (matcher.find()) {
System.out.println(" group1: " + matcher.group(1));
System.out.println(" group2: " + matcher.group(2));
} else {
System.out.println("no match");
}

输出

group1: 1a
group2: 2b

如果我在任一组之后添加 ? 它仍然有效。如果我在 BOTH 之后添加 ? 它仍然匹配,但对两个组都返回 null。

如何使这两个组都是可选的,以便它匹配

情况 1:“bla 1a bla”

案例 2:“bla 2b bla”

情况 3:“bla 1a2b bla”?

最佳答案

我发现有两种可能的方法:

  1. 一组进行两次:

    如果您使用 "([1-9]a)([1-9]b)?|([1-9]b)",它将匹配您想要的内容,但是您必须检查第 2 组和第 3 组才能找到带有 b 的部分。

  2. 使用前瞻

    在正则表达式 "(?=[1-9][ab])([1-9]a)?([1-9]b)?" 中,首先是正向前瞻将确保以下两个组之一匹配,然后这两个组就有匹配的机会。

解决方案 1 更便携(并非所有正则表达式引擎都支持前瞻),并且可能稍快一些(并且对于大多数人来说更容易理解),但需要更改组的使用方式(您必须检查组 2(或组 1)是否为 null 并在这种情况下使用组 3。

关于java - 正则表达式 - 可选择捕获 2 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com