首页 >后端开发 >Golang >如何使用 Go 高效地查找字符串中的重叠匹配项?

如何使用 Go 高效地查找字符串中的重叠匹配项?

Patricia Arquette
Patricia Arquette原创
2024-12-22 03:55:11188浏览

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Golang 中的重叠模式匹配:一个简单的解决方案

虽然 Go 的 regexp 包提供了强大的模式匹配功能,但它本身缺乏对重叠的支持匹配。为了解决这个问题,利用 strings.Index 函数的简单有效的方法提供了更合适的解决方案。

考虑以下代码:

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)

在此代码段中,变量输入存储目标字符串。我们初始化一个名为 idx 的空整数切片来存储输入字符串中模式匹配的起始索引。 j 变量跟踪搜索中的当前位置。

解决方案的核心在于 for 循环。我们重复调用 strings.Index 来搜索模式“.#..”。返回值 i 表示从索引 j 开始的模式的第一次出现。如果 i 不是 -1,我们就找到了一个匹配项,并将其起始索引 (j i) 记录在 idx 切片中。然后,我们将 j 加 i 1,将搜索移动到匹配项后面的字符。

循环继续此过程,直到找不到更多匹配项。然后,我们获取输入字符串中“.#..”所有重叠匹配的起始索引列表。

以上是如何使用 Go 高效地查找字符串中的重叠匹配项?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn