我知道在Golang中不支持查找,但是我无法理解转换。
正则表达式:^ (? ! d -) ([ da-zA-Z] +) ([-][ da-zA-Z])
美元环顾四周后,我认为@tshiono的想法是最有意义的,但正则表达式不符合我的期望。我最终得到了这样的东西
package main
import (
"fmt"
"regexp"
)
func main() {
st := []string{
"test-adccount",
"s-asdgaysdtuaystdua",
"2342348jtdstyfu",
"kdshkjfshdkfjhd-jkshdfjkshdf",
"uysiufysdusidyf-jsdkhfjksdhf",
"ausyduaysidyaisyd",
"2abc-f",
"d-23423423",
"-iasodaisdyauiysd",
"sudyfisdufy82|ldjf",
"klskdjfsd898883---sdfkjskdfjsld",
}
for _, s := range st {
r1 := regexp.MustCompile(`^([da-zA-Z]+)([da-zA-Z-]+)$`)
r2 := regexp.MustCompile(`^(d-).+$`)
if r1.MatchString(s) && !r2.MatchString(s) {
fmt.Println(fmt.Sprintf("%s :: matched", s))
} else {
fmt.Println(fmt.Sprintf("%s :: does not matched", s))
}
}
}
https://play.golang.org/p/j-7INwyDwU4
可以在不使用PCRE
的情况下改变正向环顾断言,但是消极的环顾四周不能。我们需要将正则表达式拆分为两步逻辑。
例如,我们可以在python
中这样说:
import re
s = '2abc-D' # matches
#s = 'd-D' # doesn't match
m = re.match(r'^(?!d-)([da-zA-Z]+)(-[da-zA-Z])$', s)
if (m):
print(m.groups())
在Golang
中,我们需要说:
package main
import (
"fmt"
"regexp"
)
func main() {
s := "2abc-D" // matches
// s := "d-D" // doesn't match
r := regexp.MustCompile(`^([da-zA-Z]+)(-[da-zA-Z])$`)
if !(regexp.MustCompile(`^d-`).MatchString(s)) {
fmt.Println(r.FindStringSubmatch(s))
}
}