1657703340
Les expressions régulières sont une caractéristique clé de chaque langage de programmation dans le développement de logiciels. Il est pratique lorsque vous devez créer une logique de validation des données qui compare les valeurs d'entrée à un modèle. Golang est livré avec un package regexp intégré qui vous permet d'écrire des expressions régulières de toute complexité.
Le package regexp fournit un certain nombre de fonctions pour gérer les correspondances de modèles.
Pour cet article, nous allons expérimenter les fonctions de base et les plus utiles pour gérer les correspondances de modèles.
MatchString
La MatchString
fonction vérifie si la chaîne d'entrée contient une correspondance du modèle d'expression régulière. Il accepte un modèle d'expression régulière et une chaîne en tant que paramètres et renvoie true
s'il y a une correspondance. Si le modèle ne parvient pas à se compiler, des erreurs sont renvoyées.
Voici un extrait de l'explication ci-dessus :
package main
import (
"fmt"
"regexp"
)
func main() {
inputText := "I love new york city"
match, err := regexp.MatchString("[A-z]ork", inputText)
if err == nil {
fmt.Println("Match:", match)
} else {
fmt.Println("Error:", err)
}
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Match: true
FindStringIndex
FindStringIndex
renvoie uniquement la première correspondance, en progressant de gauche à droite. La correspondance est exprimée sous la forme d'une int
tranche, la première valeur indiquant le début de la correspondance dans la chaîne et le second nombre indiquant le nombre de caractères correspondants. Un nil
résultat signifie qu'aucune correspondance n'a été trouvée.
Voici un exemple de cas d'utilisation de la FindStringIndex
méthode :
package main
import (
"fmt"
"regexp"
)
func getSubstring(s string, indices []int) string {
return string(s[indices[0]:indices[1]])
}
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
firstMatchIndex := pattern.FindStringIndex(welcomeMessage)
fmt.Println("First matched index", firstMatchIndex[0], "-", firstMatchIndex[1],
"=", getSubstring(welcomeMessage, firstMatchIndex))
}
Ici, nous avons écrit une getSubstring
fonction personnalisée qui renvoie une sous-chaîne composée des valeurs de la int
tranche et de la chaîne d'entrée. Le package regexp a la FindString
fonction intégrée qui obtient le même résultat.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
First matched index 0 - 5 = Hello
FindString
Cette méthode renvoie uniquement la première chaîne correspondante, en progressant de gauche à droite par le modèle compilé.
Une chaîne vide sera retournée si aucune correspondance n'est faite. S'il n'y a pas de correspondance, la valeur de retour est une chaîne vide, mais elle sera également vide si l'expression régulière correspond avec succès à une chaîne vide. Si vous devez faire la distinction entre ces cas, utilisez les méthodes FindStringIndex
ou .FindStringSubmatch
Voici un exemple de cas d'utilisation de la FindString
méthode :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
firstMatchSubstring := pattern.FindString(welcomeMessage)
fmt.Println("First matched substring:", firstMatchSubstring)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
First matched substring: Hello
FindAllString
(s, max)Cette méthode prend une chaîne et des int
arguments et renvoie une tranche de chaîne contenant toutes les correspondances trouvées dans la chaîne d'entrée par le modèle compilé dans la chaîne d'entrée. Le nombre maximum de correspondances est spécifié par l' int
argument max
, avec -1
n'indiquant aucune limite. S'il n'y a pas de correspondance, un nil
résultat est renvoyé.
Voici un exemple de cas d'utilisation de la FindAllString
méthode :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
allSubstringMatches := pattern.FindAllString(welcomeMessage, -1)
fmt.Println(allSubstringMatches)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[Hello york]
FindAllStringIndex
(s, max)La FindAllStringIndex
méthode est la All
version de FindStringIndex
. Il prend une chaîne et des int
arguments et renvoie une tranche de int
tranches de toutes les correspondances successives du modèle. S'il n'y a pas de correspondance, un résultat nul est renvoyé.
L'appel d'une FindAll
méthode avec le int
paramètre de 0
ne renverra aucun résultat, et l'appel avec le int
paramètre de 1
renverra une tranche de int
tranche de la première chaîne correspondante à partir de la gauche. Le int
paramètre de -1
renvoie une tranche de int
tranches de toutes les correspondances successives du motif.
La tranche renvoyée contient deux int
valeurs, la première valeur indiquant le début de la correspondance dans la chaîne et la seconde indiquant le nombre de caractères correspondants.
Voici un exemple de cas d'utilisation de la FindAllStringIndex
méthode :
package main
import (
"fmt"
"regexp"
)
func getSubstring(s string, indices []int) string {
return string(s[indices[0]:indices[1]])
}
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
allIndices := pattern.FindAllStringIndex(welcomeMessage, -1)
fmt.Println(allIndices)
for i, idx := range allIndices {
fmt.Println("Index", i, "=", idx[0], "-",
idx[1], "=", getSubstring(welcomeMessage, idx))
}
}
Ici, nous avons écrit une boucle for de base qui appelle notre getSubstring
fonction personnalisée qui renvoie une sous-chaîne composée des valeurs de la int
tranche et de la chaîne d'entrée.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
\[[0 5\] [27 31]]
Index 0 = 0 - 5 = Hello
Index 1 = 27 - 31 = york
La méthode Compile compile un modèle d'expression régulière afin qu'il puisse être réutilisé dans des requêtes plus complexes.
attern, compileErr := regexp.Compile("[A-z]ork")
Voici comment écrire un modèle de compilation dans Golang :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern, compileErr := regexp.Compile("[A-z]ork")
correctAnswer := "Yes, I love new york city"
question := "Do you love new york city?"
wrongAnswer := "I love dogs"
if compileErr == nil {
fmt.Println("Question:", pattern.MatchString(question))
fmt.Println("Correct Answer:", pattern.MatchString(correctAnswer))
fmt.Println("Wrong Answer:", pattern.MatchString(wrongAnswer))
} else {
fmt.Println("Error:", compileErr)
}
}
Parce que le modèle n'a besoin d'être compilé qu'une seule fois, c'est plus efficace. La MatchString
fonction est définie par une instance du RegExp
type, qui est renvoyée par la Compile
fonction.
La compilation d'un modèle vous donne également accès aux fonctionnalités et techniques d'expression régulière.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Question : vrai Bonne réponse : vrai Mauvaise réponse : faux
La Split
méthode divise une chaîne en utilisant les correspondances faites par une expression régulière. Il prend une chaîne et des int
arguments et renvoie une tranche des sous-chaînes fractionnées. Le int
paramètre de -1
renvoie une tranche de sous-chaînes de toutes les correspondances successives du modèle.
split
(s, max)package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("guys|york")
welcomeMessage := "Hello guys, welcome to new york city"
split := pattern.Split(welcomeMessage, -1)
for _, s := range split {
if s != "" {
fmt.Println("Substring:", s)
}
}
}
Ici, nous avons écrit une for
boucle de base pour imprimer chaque sous-chaîne scindée.
Vous pouvez expérimenter davantage en remplaçant -1
par d'autres nombres.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[Hello , welcome to new city]
Substring: Hello
Substring: , welcome to new
Substring: city
Les sous-expressions facilitent la récupération des sous-chaînes à partir d'une région correspondante en permettant l'accès aux sections d'une expression régulière. Les sous-expressions sont indiquées entre parenthèses. Il peut être utilisé pour identifier les régions de contenu qui sont importantes dans le modèle :
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
FindStringSubmatch
La FindStringSubmatch
méthode est une méthode de sous-expression qui fait la même chose que la FindString
méthode mais renvoie en plus les sous-chaînes correspondant aux expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
subStr := pattern.FindStringSubmatch(welcomeMessage)
fmt.Println(subStr)
for _, s := range subStr {
fmt.Println("Match:", s)
}
}
Ici, nous avons défini deux sous-expressions, une pour chaque composant variable du modèle.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[welcome to new york city to york]
Match: welcome to new york city
Match: to
Match: york
Les sous-expressions peuvent également être nommées pour faciliter le traitement des sorties résultantes.
Voici comment nommer une sous-expression : entre parenthèses, ajoutez un point d'interrogation, suivi d'une majuscule P
, suivi du nom entre crochets.
Voici un extrait de l'explication ci-dessus :
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
Ici, les sous-expressions reçoivent les noms val1
et val2
.
SubexpNames()
Cette méthode renvoie une tranche contenant les noms des sous-expressions, exprimées dans l'ordre dans lequel elles sont définies :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
replaced := pattern.SubexpNames()
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[ val1 val2]
NumSubexp()
Cette méthode renvoie le nombre de sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
replaced := pattern.NumSubexp()
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
2
Consultez la documentation Golang pour plus de méthodes d'expression régulière pour les sous-expressions.
Le package regexp fournit un certain nombre de méthodes pour remplacer les sous-chaînes.
ReplaceAllString
( s
, template
)Cette méthode prend la chaîne et un template
paramètre et remplace la partie correspondante de la ou des chaînes par le modèle spécifié, qui est développé avant d'être inclus dans le résultat pour s'adapter aux sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
template := "(value 1: ${val1}, value 2: ${val2})"
replaced := pattern.ReplaceAllString(welcomeMessage, template)
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Hello guys, (value 1: to, value 2: york)
ReplaceAllLiteralString
( s
, sous)Cette méthode prend la chaîne et un template
paramètre et remplace le morceau correspondant de la ou des chaînes par le modèle spécifié, qui est inclus dans le résultat sans être développé pour les sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
template := "(value 1: ${val1}, value 2: ${val2})"
replaced := pattern.ReplaceAllLiteralString(welcomeMessage, template)
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Hello guys, (value 1: ${val1}, value 2: ${val2})
La ReplaceAllStringFunc
méthode substitue le contenu généré par une fonction à la partie correspondante de la chaîne d'entrée :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
replaced := pattern.ReplaceAllStringFunc(welcomeMessage, func(s string) string {
return "here is the replacement content for the matched string."
})
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Bonjour les gars, voici le contenu de remplacement pour la chaîne correspondante
Dans cet article, nous avons exploré le package go regexp , ainsi que ses méthodes intégrées pour gérer les correspondances de base à complexes avec regex et compiler et réutiliser des modèles d'expression régulière.
Vous pouvez consulter la documentation go regexp pour plus d'informations sur les expressions régulières avec Golang.
Source : https://blog.logrocket.com/deep-dive-regular-expressions-golang/
1657703340
Les expressions régulières sont une caractéristique clé de chaque langage de programmation dans le développement de logiciels. Il est pratique lorsque vous devez créer une logique de validation des données qui compare les valeurs d'entrée à un modèle. Golang est livré avec un package regexp intégré qui vous permet d'écrire des expressions régulières de toute complexité.
Le package regexp fournit un certain nombre de fonctions pour gérer les correspondances de modèles.
Pour cet article, nous allons expérimenter les fonctions de base et les plus utiles pour gérer les correspondances de modèles.
MatchString
La MatchString
fonction vérifie si la chaîne d'entrée contient une correspondance du modèle d'expression régulière. Il accepte un modèle d'expression régulière et une chaîne en tant que paramètres et renvoie true
s'il y a une correspondance. Si le modèle ne parvient pas à se compiler, des erreurs sont renvoyées.
Voici un extrait de l'explication ci-dessus :
package main
import (
"fmt"
"regexp"
)
func main() {
inputText := "I love new york city"
match, err := regexp.MatchString("[A-z]ork", inputText)
if err == nil {
fmt.Println("Match:", match)
} else {
fmt.Println("Error:", err)
}
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Match: true
FindStringIndex
FindStringIndex
renvoie uniquement la première correspondance, en progressant de gauche à droite. La correspondance est exprimée sous la forme d'une int
tranche, la première valeur indiquant le début de la correspondance dans la chaîne et le second nombre indiquant le nombre de caractères correspondants. Un nil
résultat signifie qu'aucune correspondance n'a été trouvée.
Voici un exemple de cas d'utilisation de la FindStringIndex
méthode :
package main
import (
"fmt"
"regexp"
)
func getSubstring(s string, indices []int) string {
return string(s[indices[0]:indices[1]])
}
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
firstMatchIndex := pattern.FindStringIndex(welcomeMessage)
fmt.Println("First matched index", firstMatchIndex[0], "-", firstMatchIndex[1],
"=", getSubstring(welcomeMessage, firstMatchIndex))
}
Ici, nous avons écrit une getSubstring
fonction personnalisée qui renvoie une sous-chaîne composée des valeurs de la int
tranche et de la chaîne d'entrée. Le package regexp a la FindString
fonction intégrée qui obtient le même résultat.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
First matched index 0 - 5 = Hello
FindString
Cette méthode renvoie uniquement la première chaîne correspondante, en progressant de gauche à droite par le modèle compilé.
Une chaîne vide sera retournée si aucune correspondance n'est faite. S'il n'y a pas de correspondance, la valeur de retour est une chaîne vide, mais elle sera également vide si l'expression régulière correspond avec succès à une chaîne vide. Si vous devez faire la distinction entre ces cas, utilisez les méthodes FindStringIndex
ou .FindStringSubmatch
Voici un exemple de cas d'utilisation de la FindString
méthode :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
firstMatchSubstring := pattern.FindString(welcomeMessage)
fmt.Println("First matched substring:", firstMatchSubstring)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
First matched substring: Hello
FindAllString
(s, max)Cette méthode prend une chaîne et des int
arguments et renvoie une tranche de chaîne contenant toutes les correspondances trouvées dans la chaîne d'entrée par le modèle compilé dans la chaîne d'entrée. Le nombre maximum de correspondances est spécifié par l' int
argument max
, avec -1
n'indiquant aucune limite. S'il n'y a pas de correspondance, un nil
résultat est renvoyé.
Voici un exemple de cas d'utilisation de la FindAllString
méthode :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
allSubstringMatches := pattern.FindAllString(welcomeMessage, -1)
fmt.Println(allSubstringMatches)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[Hello york]
FindAllStringIndex
(s, max)La FindAllStringIndex
méthode est la All
version de FindStringIndex
. Il prend une chaîne et des int
arguments et renvoie une tranche de int
tranches de toutes les correspondances successives du modèle. S'il n'y a pas de correspondance, un résultat nul est renvoyé.
L'appel d'une FindAll
méthode avec le int
paramètre de 0
ne renverra aucun résultat, et l'appel avec le int
paramètre de 1
renverra une tranche de int
tranche de la première chaîne correspondante à partir de la gauche. Le int
paramètre de -1
renvoie une tranche de int
tranches de toutes les correspondances successives du motif.
La tranche renvoyée contient deux int
valeurs, la première valeur indiquant le début de la correspondance dans la chaîne et la seconde indiquant le nombre de caractères correspondants.
Voici un exemple de cas d'utilisation de la FindAllStringIndex
méthode :
package main
import (
"fmt"
"regexp"
)
func getSubstring(s string, indices []int) string {
return string(s[indices[0]:indices[1]])
}
func main() {
pattern := regexp.MustCompile("H[a-z]{4}|[A-z]ork")
welcomeMessage := "Hello guys, welcome to new york city"
allIndices := pattern.FindAllStringIndex(welcomeMessage, -1)
fmt.Println(allIndices)
for i, idx := range allIndices {
fmt.Println("Index", i, "=", idx[0], "-",
idx[1], "=", getSubstring(welcomeMessage, idx))
}
}
Ici, nous avons écrit une boucle for de base qui appelle notre getSubstring
fonction personnalisée qui renvoie une sous-chaîne composée des valeurs de la int
tranche et de la chaîne d'entrée.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
\[[0 5\] [27 31]]
Index 0 = 0 - 5 = Hello
Index 1 = 27 - 31 = york
La méthode Compile compile un modèle d'expression régulière afin qu'il puisse être réutilisé dans des requêtes plus complexes.
attern, compileErr := regexp.Compile("[A-z]ork")
Voici comment écrire un modèle de compilation dans Golang :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern, compileErr := regexp.Compile("[A-z]ork")
correctAnswer := "Yes, I love new york city"
question := "Do you love new york city?"
wrongAnswer := "I love dogs"
if compileErr == nil {
fmt.Println("Question:", pattern.MatchString(question))
fmt.Println("Correct Answer:", pattern.MatchString(correctAnswer))
fmt.Println("Wrong Answer:", pattern.MatchString(wrongAnswer))
} else {
fmt.Println("Error:", compileErr)
}
}
Parce que le modèle n'a besoin d'être compilé qu'une seule fois, c'est plus efficace. La MatchString
fonction est définie par une instance du RegExp
type, qui est renvoyée par la Compile
fonction.
La compilation d'un modèle vous donne également accès aux fonctionnalités et techniques d'expression régulière.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Question : vrai Bonne réponse : vrai Mauvaise réponse : faux
La Split
méthode divise une chaîne en utilisant les correspondances faites par une expression régulière. Il prend une chaîne et des int
arguments et renvoie une tranche des sous-chaînes fractionnées. Le int
paramètre de -1
renvoie une tranche de sous-chaînes de toutes les correspondances successives du modèle.
split
(s, max)package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("guys|york")
welcomeMessage := "Hello guys, welcome to new york city"
split := pattern.Split(welcomeMessage, -1)
for _, s := range split {
if s != "" {
fmt.Println("Substring:", s)
}
}
}
Ici, nous avons écrit une for
boucle de base pour imprimer chaque sous-chaîne scindée.
Vous pouvez expérimenter davantage en remplaçant -1
par d'autres nombres.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[Hello , welcome to new city]
Substring: Hello
Substring: , welcome to new
Substring: city
Les sous-expressions facilitent la récupération des sous-chaînes à partir d'une région correspondante en permettant l'accès aux sections d'une expression régulière. Les sous-expressions sont indiquées entre parenthèses. Il peut être utilisé pour identifier les régions de contenu qui sont importantes dans le modèle :
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
FindStringSubmatch
La FindStringSubmatch
méthode est une méthode de sous-expression qui fait la même chose que la FindString
méthode mais renvoie en plus les sous-chaînes correspondant aux expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
subStr := pattern.FindStringSubmatch(welcomeMessage)
fmt.Println(subStr)
for _, s := range subStr {
fmt.Println("Match:", s)
}
}
Ici, nous avons défini deux sous-expressions, une pour chaque composant variable du modèle.
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[welcome to new york city to york]
Match: welcome to new york city
Match: to
Match: york
Les sous-expressions peuvent également être nommées pour faciliter le traitement des sorties résultantes.
Voici comment nommer une sous-expression : entre parenthèses, ajoutez un point d'interrogation, suivi d'une majuscule P
, suivi du nom entre crochets.
Voici un extrait de l'explication ci-dessus :
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
Ici, les sous-expressions reçoivent les noms val1
et val2
.
SubexpNames()
Cette méthode renvoie une tranche contenant les noms des sous-expressions, exprimées dans l'ordre dans lequel elles sont définies :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
replaced := pattern.SubexpNames()
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
[ val1 val2]
NumSubexp()
Cette méthode renvoie le nombre de sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
replaced := pattern.NumSubexp()
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
2
Consultez la documentation Golang pour plus de méthodes d'expression régulière pour les sous-expressions.
Le package regexp fournit un certain nombre de méthodes pour remplacer les sous-chaînes.
ReplaceAllString
( s
, template
)Cette méthode prend la chaîne et un template
paramètre et remplace la partie correspondante de la ou des chaînes par le modèle spécifié, qui est développé avant d'être inclus dans le résultat pour s'adapter aux sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
template := "(value 1: ${val1}, value 2: ${val2})"
replaced := pattern.ReplaceAllString(welcomeMessage, template)
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Hello guys, (value 1: to, value 2: york)
ReplaceAllLiteralString
( s
, sous)Cette méthode prend la chaîne et un template
paramètre et remplace le morceau correspondant de la ou des chaînes par le modèle spécifié, qui est inclus dans le résultat sans être développé pour les sous-expressions :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome (?P<val1>[A-z]*) new (?P<val2>[A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
template := "(value 1: ${val1}, value 2: ${val2})"
replaced := pattern.ReplaceAllLiteralString(welcomeMessage, template)
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Hello guys, (value 1: ${val1}, value 2: ${val2})
La ReplaceAllStringFunc
méthode substitue le contenu généré par une fonction à la partie correspondante de la chaîne d'entrée :
package main
import (
"fmt"
"regexp"
)
func main() {
pattern := regexp.MustCompile("welcome ([A-z]*) new ([A-z]*) city")
welcomeMessage := "Hello guys, welcome to new york city"
replaced := pattern.ReplaceAllStringFunc(welcomeMessage, func(s string) string {
return "here is the replacement content for the matched string."
})
fmt.Println(replaced)
}
Compilez et exécutez le code ci-dessus, et vous obtiendrez le résultat suivant :
Bonjour les gars, voici le contenu de remplacement pour la chaîne correspondante
Dans cet article, nous avons exploré le package go regexp , ainsi que ses méthodes intégrées pour gérer les correspondances de base à complexes avec regex et compiler et réutiliser des modèles d'expression régulière.
Vous pouvez consulter la documentation go regexp pour plus d'informations sur les expressions régulières avec Golang.
Source : https://blog.logrocket.com/deep-dive-regular-expressions-golang/
1617882011
Does your business need a robust system across large-scale network servers then developing your app with a Golang programming language is the way to go. Golang is generally used for the development of highly secured, High Speed and High Modularity apps such as a FinTech Industry.
Want to develop a Highly secured app for your business?
Then hire a dedicated Golang developer from WebClues Infotech that are highly skilled in carrying out the work in a timely and qualitative output. With WebClues Infotech you get the assurance that we know what are the customers’ expectations and how to deliver on them on time.
Get your desired Golang Developer based on your project requirement!!
Share your requirements here https://www.webcluesinfotech.com/contact-us/
Book Free Interview with Golang developer: https://bit.ly/3dDShFg
#hire golang developer #hire go language developer #dedicated golang app developers #golang web development company #hire golang developers india #hire expert golang developers
React Interview Questions & Answers
1625631360
Today we are going to explore the basic usage of Express-FileUpload. In addition to this, I will show you how you can save/update a user record with a profile image that you can upload.
Chapters:
0:00 Introduction:
1:16 NPM Project Setup
3:54 Creating Express Server
5:51 Setting up Layouts & Routes
9:46 Express Upload Form
21:50 User Card
33:40 Database
52:05 Ending
#node.js #express #express-fileupload #express-handlebars #mysql #upload and store images
1602065961
https://www.mobinius.com/blogs/golang-web-development-company
#golang web development #golang-app-development-company #golang-development-solutions #hire-golang-developers #golang-development-services
1624960485
The backend of your application is truly the essential part of your product. No matter how much you appreciate the design, the application’s success lies in its backend. A scalable backend that effectively implements the required business logic is the primary goal of programmers.
Therefore, it is crucial to choose the most powerful and scalable technology. There are plenty of languages in the market that can form the backend of any application, Node.js and Golang are the two most popular technologies among them.
They are real and developed languages that have recently been used in various outstanding projects. Golang is an open-source programming language, whereas Node.js is an open-source server framework. They both are gaining popularity for various reasons.
According to a development stat, it is observed that almost 50% out of 58,543 respondents use Node.js as their preferred app development tool.
Golang, on the other hand, has overtaken other programming languages in the application development market and has gained huge recognition over the past few years.
But, which backend framework is best for you? In this article, I’ll make a healthy comparison of two of Google’s most popular backend development tools based on several essential features and various other factors.
#best backend frameworks #node or golang #golang or nodejs #nodejs vs golang #golang vs nodejs #top backend frameworks