J'essaie de trouver un moyen de faire correspondre un motif avec regexp.Regexp
en utilisant Go.
Les critères du concours sont les suivants :
FooBar
或其子字符串 Foo
au début de la ligne, ou pas du tout. S+
)Donc, cela devrait correspondre, par exemple :
FooABC
FooBarABC
FooBar
(car il n'y a pas d'autres caractères après) ABC
(因为它不是以 Foo
)J'ai essayé différentes expressions mais je n'arrive pas à les comprendre.
J'ai trouvé que le mode d'anticipation négative existe dans d'autres implémentations, mais Go ne semble pas le fournir. Existe-t-il un autre moyen de résoudre ce problème ?
Voir (mis à jour) : https://regex101.com/r/SWSTzv/3
Je sais que cela peut évidemment être résolu sans utiliser regexp
. Cependant, le but de cette requête est de comprendre si ce problème peut être résolu par l'implémentation stdlib de Go. regexp
的情况下解决。然而,这个请求的目的是了解这个问题是否可以通过 Go 的 stdlib 实现来解决。
为什么不直接反转与正则表达式 ^Foo(?:Bar)?$
^Foo(?:Bar)?$
(enfin, pas seulement ) ?
package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`^Foo(?:Bar)?$`) str := `Foo FooBar FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo ABC AbcFooBar` for _, s := range strings.Split(str, "\n") { if strings.HasPrefix(s, "Foo") && !re.MatchString(s) { fmt.Println(s) } } }
<code>FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo </code>
Essayez-le sur rextester.
Mise à jour em>
Un de plus basé sur des expressions régulières et utilisant des
package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`^Foo$|^FooBar$|^(Foo.+)`) str := `Foo FooBar FooA FooB FooBa FooBax FooBxr FooBarAbc FooBarFoo ABC AbcFooBar` for _, s := range strings.Split(str, "\n") { submatches := re.FindStringSubmatch(s) if submatches != nil && submatches[1] != "" { fmt.Println(submatches[1]) } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!