gpt4 book ai didi

Java递归(?)重复(?)深度(?)模式匹配

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:21 25 4
gpt4 key购买 nike

我正在尝试获取输入字符串中与给定模式匹配的ALL子字符串。

例如,

给定字符串:aaxxbbaxb
模式:a[a-z]{0,3}b
(其实我想表达的是:所有以a开头,以b结尾,但中间最多可以有2个字母的pattern)

我想要的确切结果(及其索引):

aaxxb: 索引0~4
axxb: 索引 1~4
axxbb: 索引 1~5
axb: 索引 6~8

但是当我使用 Pattern.compile()Matcher.find() 通过 Pattern 和 Matcher 类运行它时,它只会给我:

aaxxb : 索引 0~4
axb : 索引 6~8

这是我使用的一段代码。

Pattern pattern = Pattern.compile("a[a-z]{0,3}b", Pattern.CASE_INSENSITIVE);
Matcher match = pattern.matcher("aaxxbbaxb");
while (match.find()) {
System.out.println(match.group());
}

如何检索与模式匹配的每一段字符串

当然,它不一定非要使用Pattern和Matcher类,只要它高效:)

最佳答案

(参见:All overlapping substrings matching a java regex)

这是我想出的完整解决方案。它可以处理原始正则表达式中的零宽度模式、边界等。它查看文本字符串的所有子字符串,并通过在开头和结尾用适当数量的通配符填充模式来检查正则表达式是否仅在特定位置匹配。它似乎适用于我尝试过的案例——尽管我没有进行广泛的测试。它的效率肯定低于它应有的水平。

  public static void allMatches(String text, String regex)
{
for (int i = 0; i < text.length(); ++i) {
for (int j = i + 1; j <= text.length(); ++j) {
String positionSpecificPattern = "((?<=^.{"+i+"})("+regex+")(?=.{"+(text.length() - j)+"}$))";
Matcher m = Pattern.compile(positionSpecificPattern).matcher(text);

if (m.find())
{
System.out.println("Match found: \"" + (m.group()) + "\" at position [" + i + ", " + j + ")");
}
}
}
}

关于Java递归(?)重复(?)深度(?)模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318469/

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