Regex 将PERL正则表达式转换为Golang RE2
我知道Golang不支持lookaround,但是我无法了解转换Regex 将PERL正则表达式转换为Golang RE2,regex,go,Regex,Go,我知道Golang不支持lookaround,但是我无法了解转换 正则表达式:^(?!d-([\da-zA-Z]+)([-][\da-zA-Z])$可以在不使用PCRE的情况下更改正向环视断言,但是 消极环顾不能。我们需要将正则表达式分成两步逻辑。 例如,我们可以在python中说: import re s = '2abc-D' # matches #s = 'd-D' # doesn't match m = re.match(r'^(?!d-)(
正则表达式:^(?!d-([\da-zA-Z]+)([-][\da-zA-Z])$可以在不使用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())
在歌朗中,我们需要说:
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))
}
}
环顾四周后,我认为@tshiono的想法是最有意义的,但regex与我的预期不符。 我的结局是这样的
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))
}
}
}
谢谢,你的想法完全有道理,但是regex不是我所期望的。请查看原始正则表达式,您的答案只匹配其中一个字符串,而不是其中一些字符串。感谢您对此进行调查谢谢您的反馈。恐怕您提到的正则表达式与原始帖子中的不同:)。但你的答案似乎很有效。干得好