如何解决Go regexp是否支持连续匹配?
我发现其他一些语言也支持连续匹配锚\ G
\ G锚指定必须在上一个比赛结束的地方进行比赛。
但是我发现\ G是Golang正则表达式中的无效令牌。等价的是什么?
解决方法
似乎不支持\G
。 package docs状态:
接受的正则表达式的语法与Perl,Python和其他语言使用的常规语法相同。更准确地说,它是RE2接受并在https://golang.org/s/re2syntax中描述的语法,除了\ C。
在RE2中,除Perl外,明确不支持\G
:
\G at end of last match (NOT SUPPORTED) PERL
在Regexp
类型的方法中,没有任何方法可以强制进行连续匹配。如果您绝对必须实现此结果,则可能必须编写自定义代码。
冗长的演示代码:
package main
import (
"fmt"
"regexp"
"strings"
)
const s = "foo,bar,baz,qu!ux,foox"
func main() {
re,err := regexp.Compile(`\w+,?`)
if err != nil {
panic(err)
}
matches := re.FindAllString(s,-1)
var (
split int
curidx int
)
for _,m := range matches {
if strings.Index(s,m) != curidx {
break
}
curidx += len(m)
split++
}
contiguousMatches := matches[:split]
fmt.Println(contiguousMatches) // [foo,qu]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。