从regex101:
\b
立即匹配由\w
(az) 匹配的字符和不匹配的字符\w
(以任一顺序),而不消耗任何字符。
它不能用于将非单词与单词分开。
所以使用\b
是行不通的。(不管事实正则表达式可能不是最适合这种情况)
简单地测试字符串是否包含=~
(如“如何检查字符串是否包含 Go 中的子字符串”)
fmt.Println(strings.Contains(filter, "=~")) // true
请参阅这个操场示例。
package main
import (
"fmt"
"strings"
)
func main() {
var sep = "=~"
var filter = "exported_pod=~.*grafana.*"
matched := strings.Contains(filter, sep)
fmt.Println(matched)
}
如果您需要测试多个分隔符,那么是的,正则表达式可以提供帮助:操场示例,此处测试正则表达式。
package main
import "fmt"
import "regexp"
func main() {
var filter = "exported_pod=~.*grafana.*"
matched, _ := regexp.MatchString(`[^=!~](=|=~|!=|!~)[^=!~]`, filter)
fmt.Println(matched)
}
使用带有命名捕获组的正则表达式:
[^=!~](?P<separator>=|=~|!=|!~)[^=!~]
^^^^^^^^^^^^^
regexp.SubexpIndex
您可以使用( Go 1.15+, Aug. 2020 )提取该分隔符,并使用它来拆分原始字符串。
请参阅此操场示例:
package main
import "fmt"
import "regexp"
import "strings"
func main() {
var filter = "exported_pod=~.*grafana.*"
re := regexp.MustCompile(`[^=!~](?P<separator>=|=~|!=|!~)[^=!~]`)
matches := re.FindStringSubmatch(filter)
separator := matches[re.SubexpIndex("separator")]
filtered := strings.Split(filter, separator)
fmt.Println(filtered)
}
filtered
是一个数组,在 any 之前和之后都有部分=~
(正则表达式检测到的分隔符)。