gpt4 book ai didi

java - 查找最后一组正则表达式的第一个元素的索引?

转载 作者:行者123 更新时间:2023-11-30 03:40:37 34 4
gpt4 key购买 nike

我有以下问题:我有一个字符串集合,看起来有点像这样:

"01100110011"
"11100110010"
"10001110000"

是否可以编写一个正则表达式来查找最后一组中第一个的索引?我目前正在使用 HashMap 和大量与lastindexof indexof等相关的计算。但此时它开始看起来很荒谬。

最佳答案

非常简单,编译以下正则表达式并搜索第一个与 Matcher.find() 匹配的内容:

".*(?<!1)(1)"

您可以通过调用.start(1)获取索引关于Matcher对象。

正则表达式基本上找到了最后一个 1 ,其前面没有紧接着另一个 1 (?<!1) ,它有效地找到最后一组连续 1 中的第一个。

示例代码:

int startingIndexOfLastGroup(String str) {
Pattern p = Pattern.compile(".*(?<!1)(1)");
Matcher m = p.matcher(str);

if (m.find()) {
return m.start(1);
}

// Return -1 for a string without 1
return -1;
}

上面的正则表达式很简单,但不是很好,因为它回溯了很多。如果您不想太多回溯,可以使用以下正则表达式:

"(?:[^1]*+(1+))*+"

简单来说,它会搜索0个或多个非1字符[^1]*+ ,后跟 1 中的一个或多个的(1+) ,并且这样的序列重复尽可能多次。由于重复捕获组仅存储最后一次捕获的索引,因此它将有效记录最后一组连续1的起始索引。的。

关于java - 查找最后一组正则表达式的第一个元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883273/

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