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中文网其他相关文章!