1 回答
TA贡献1836条经验 获得超4个赞
这个正则表达式:
(?i)(This is a delimited string)|delimited|string
匹配这些文字字符串的最左边最长的匹配项:
This is a delimited string
,delimited
, 或者string
将文本This is a delimited string, so let's go
提供给正则表达式,第一个选项匹配。它是唯一的匹配项,因为它同时消耗了delimited
和string
- 搜索在匹配项之后继续进行。
将您的替代文本This is not a delimited string, so let's go
提供给正则表达式会产生 2 个匹配项,因为第一个替代文本不匹配,但第二个 ( delimited
) 和第三个 ( string
) 匹配。
如果您想知道匹配的备选方案,只需将每个备选方案括在括号中以使其成为捕获组:
(?i)(This is a delimited string)|(delimited)|(string)`
现在我们可以检查每个捕获组的值:如果它的长度大于 1,则它是匹配的备选方案。
https://goplay.tools/snippet/nTm56_al__2
package main
import (
"fmt"
"regexp"
)
func main() {
str := "This is a delimited string, so let's go and find some delimited strings"
re := regexp.MustCompile(`(?i)(This is a delimited string)|(delimited)|(string)`)
matches := re.FindAllStringSubmatch(str, -1)
fmt.Println("Matches:", len(matches))
for i, match := range matches {
j := 1
for j < len(match) && match[j] == "" {
j++
}
fmt.Println("Match", i, "matched alternative", j, "with", match[j])
}
}
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报