RegEx
Hérite de : RefCounted < Object
Classe pour chercher du texte avec des motifs en utilisant des expressions régulières.
Description
Une expression régulière (ou regex) est un langage compact qui peut être utilisé pour reconnaître des chaînes qui suivent un motif spécifique, comme des URLs, des adresses mail, des phrases complètes, etc... Par exemple, un regex ab[0-9] trouverait toute chaîne valant ab suivi de n'importe quel chiffre entre 0 et 9. Pour une explication plus détaillée, vous pouvez facilement trouver divers tutoriels et explications détaillées sur Internet.
Pour commencer, l'objet RegEx doit être compilé avec le motif de recherche en utilisant compile() avant qu'il puisse être utilisé.
var regex = RegEx.new()
regex.compile("\\w-(\\d+)")
Le motif de recherche doit être échappé d'abord en GDScript avant qu'il soit échappé pour l'expression. Par exemple, compile("\\d+") serait lu par RegEx comme \d+. De la même façon, compile(("\"(?:\\\\.|[^\"])*\"") serait lu comme "(?:\\.|[^"])*". En GDScript, vous pouvez aussi utiliser des littéraux de chaîne brutes (r-strings). Par exemple, compile(r'"(?:\\.|[^"])*"') serait lu de la même manière.
En utilisant search(), vous pouvez trouver le motif dans le texte donné. Si un motif est trouvé, RegExMatch est renvoyé et vous pouvez récupérer les détails du résultat en utilisant des méthodes telles que RegExMatch.get_string() et RegExMatch.get_start().
var regex = RegEx.new()
regex.compile("\\w-(\\d+)")
var resultat = regex.search("abc n-0123")
if resultat:
print(resultat.get_string()) # Affiche "n-0123"
Les résultats des groupes de capture () peuvent être récupérés en passant le numéro du groupe aux diverses méthodes dans RegExMatch. Le groupe 0 est le défaut et se référera toujours au motif entier. Dans l'exemple ci-dessus, appeler resultat.get_string(1) vous donnerait 0123.
Cette version de RegEx supporte aussi les groupes de capture nommés, et les noms peuvent être utilisés pour récupérer les résultats. Si deux groupes ou plus ont le même nom, le nom se référerait seulement au premier avec une correspondance.
var regex = RegEx.new()
regex.compile("d(?<chiffre>[0-9]+)|x(?<chiffre>[0-9a-f]+)")
var resultat = regex.search("le nombre est x2f")
if resultat:
print(resultat.get_string("chiffre")) # Affiche "2f"
Si vous avez besoin de traiter plusieurs résultats, search_all() génère une liste de tous les résultats ne se chevauchant pas. Cela peut-être combiné avec une boucle for pour plus de facilité.
# Affiche "01 03 0 3f 42"
for resultat in regex.search_all("d01, d03, d0c, x3f et x42"):
print(resultat.get_string("chiffre"))
Exemple : Diviser une chaîne en utilisant une RegEx :
var regex = RegEx.new()
regex.compile("\\S+") # Classe de caractères non-espace
var resultats = []
for resultat in regex.search_all("Un Deux \n\tTrois"):
resultats.push_back(result.get_string())
print(resultats) # Affiche ["Un", "Deux", "Trois"]
Note : L'implémentation regex de Godot est basée sur la bibliothèque PCRE2. Vous pouvez voir la référence des motifs complète ici.
Astuce : Vous pouvez utiliser Regexr pour vérifier des expressions régulières en ligne.
Méthodes
void |
clear() |
create_from_string(pattern: String, show_error: bool = true) static |
|
get_group_count() const |
|
get_names() const |
|
get_pattern() const |
|
is_valid() const |
|
search(subject: String, offset: int = 0, end: int = -1) const |
|
search_all(subject: String, offset: int = 0, end: int = -1) const |
|
sub(subject: String, replacement: String, all: bool = false, offset: int = 0, end: int = -1) const |
Descriptions des méthodes
void clear() 🔗
Cette méthode réinitialise l'état de l'objet, comme si il était fraîchement créé. En fait, elle désaffecte l'expression régulière de cet objet.
Error compile(pattern: String, show_error: bool = true) 🔗
Compile et assigne le motif de recherche à utiliser. Renvoie @GlobalScope.OK si la compilation est réussie. Si la compilation échoue, renvoie @GlobalScope.FAILED et lorsque show_error vaut true, les détails sont affichés à la sortie standard.
RegEx create_from_string(pattern: String, show_error: bool = true) static 🔗
Crée et compile un nouvel objet RegEx. Voir aussi compile().
Renvoie le nombre de groupes de capture dans le motif compilé.
PackedStringArray get_names() const 🔗
Renvoie un tableau de noms de groupes de capture nommés dans le motif compilé. Ils sont ordonnés par ordre d'apparition.
Renvoie le motif de recherche original qui a été compilé.
Renvoie si cet objet a un motif de recherche valide assigné.
RegExMatch search(subject: String, offset: int = 0, end: int = -1) const 🔗
Cherche le texte pour le motif compilé. Renvoie un conteneur RegExMatch du premier résultat correspondant si trouvé, sinon null.
La région dans laquelle rechercher peut être spécifiée avec offset et end. Ceci est utile lors d'une recherche d'un autre correspondance dans le même objet subject en appelant cette méthode à nouveau après un succès précédent. Notez que définir ces paramètres diffère du passage d'une chaîne raccourcie. Par exemple, l'ancre de démarrage ^ n'est pas affectée par offset, et le caractère avant offset sera vérifié pour la limite de mot \b.
Array[RegExMatch] search_all(subject: String, offset: int = 0, end: int = -1) const 🔗
Cherche le texte pour le motif compilé. Renvoie un tableau de conteneurs RegExMatch pour chaque résultat ne se superposant pas. Si aucun résultat n'est trouvé, un tableau vide est renvoyé à la place.
La région dans laquelle rechercher peut être spécifiée avec offset et end. Ceci est utile lors d'une recherche d'un autre correspondance dans le même objet subject en appelant cette méthode à nouveau après un succès précédent. Notez que définir ces paramètres diffère du passage d'une chaîne raccourcie. Par exemple, l'ancre de démarrage ^ n'est pas affectée par offset, et le caractère avant offset sera vérifié pour la limite de mot \b.
String sub(subject: String, replacement: String, all: bool = false, offset: int = 0, end: int = -1) const 🔗
Cherche le texte pour le motif compilé et le remplace par la chaîne spécifiée. les séquences d'échappement et les références arrières telles que $1 et $name sont étendues et résolues. Par défaut, seule la première instance est remplacée, mais cela peut être changé pour toutes les instances (remplacement global).
La région dans laquelle rechercher peut être spécifiée avec offset et end. Ceci est utile lors d'une recherche d'un autre correspondance dans le même objet subject en appelant cette méthode à nouveau après un succès précédent. Notez que définir ces paramètres diffère du passage d'une chaîne raccourcie. Par exemple, l'ancre de démarrage ^ n'est pas affectée par offset, et le caractère avant offset sera vérifié pour la limite de mot \b.