我可以确认字符串是否与正则表达式中的第一个块匹配吗



我有以下代码:

package main
import (
"fmt"
"regexp"
)
func main() {
str := "This is a delimited string, so let's go"
re := regexp.MustCompile(`(?i)(This is a delimited string)|delimited|string`)
matches := re.FindAllString(str, -1)
fmt.Println("We found", len(matches), "matches, that are:", matches)
}

得到的输出为:

We found 1 matches, that are: [This is a delimited string]

如果我将上述代码中的str更改为:

str := "This is not a delimited string, so let's go"

然后我得到的输出是:

We found 2 matches, that are: [delimited string]

两者都是正确的,但在具有1 match的第一个块中,str100%与我的正则表达式中的第一个区块(即This is a delimited string(匹配,而在显示2个匹配的第二个块中的str,它们都与我的regex中的第一块不匹配。

有没有办法,让我知道str是否与正则表达式中的第一个块匹配,这样我就可以得到完全匹配or部分匹配is thelen(matches(`不为零,但正则表达式中第一个块不匹配!

这个正则表达式:

(?i)(This is a delimited string)|delimited|string

匹配这些文字字符串中最左边最长的匹配:

  • CCD_ 10
  • delimited,或
  • string

将文本This is a delimited string, so let's go输入到正则表达式中,第一个替换项匹配。它是唯一的匹配,因为它同时消耗了delimitedstring——搜索在匹配之后的点继续。

将替换文本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])
}
}

相关内容

最新更新