Bonjour,
Depuis quelques temps je suis dans l'obligation d'utiliser Regex, et comme je ne sais pas comment faire mon code Regex je viens vous demandez de l'aide:
Voici mon string:
$players = 'GUID Bans:
[#] [GUID] [Minutes left] [Reason]
----------------------------------------
0 b2bb80f292b45b898a1b5056e9121ea1 - Test Bantime + Banlist UnBan
IP Bans:
[#] [IP Address] [Minutes left] [Reason]
----------------------------------------------'
J'aimerais donc avoir les informations
0 b2bb80f292b45b898a1b5056e9121ea1 - Test Bantime + Banlist UnBan
ATTENTION: Le "-" Avant "Test Bantime" peut être des chiffres (Heures/Semaines/Mois en minutes)
dans une array, j'ai donc fait cela, mais ça ne marche pas :
if (preg_match_all('/^([0-9]+) +([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}):([0-9]+) +([0-9]+)\\s+([a-z0-9]+)\\(OK\\)\\s+([\\pL0-9\\s]+)$/imu', $players, $matches)) {
echo '<pre>';
var_dump($matches);
echo '</pre>';
}
Merci de votre aide :)
J'ai maintenant compris comment fonctionne le Regex, code fonctionnant parfaitement :
/^([0-9]+)\s ([a-zA-Z0-9]+) ([a-zA-Z0-9-]+) ([a-zA-Z0-9-+ ]+)/i
J'ai bien toutes mes arrays
Bonjour.
C'est normal que ça ne fonctionne pas, étant donné que tu as laissé des groupes qui n'existent pas dans ta chaîne de caractères, comme par exemple le groupe qui permet de match une adresse IP.
Par contre, tu ne vas quand même pas créer un sujet à chaque fois que tu as besoin de former une Regexp, si ?
Utilises le site suivant pour tester tes Regexp : HiFi Regex Tester.
Salut,
Disons que j'ai du mal à comprendre le principe Regex, ce serait possible de vous avoir sur Skype, pour peut être m'expliquez deux trois trucs ?
Je suis bloqué depuis ce matin avec ce code Regex.. Il me faudrais vraiment de l'aide.
Pour le deuxième groupe c'est plutôt simple, c'est une chaîne de caractères de lettres au format minuscule et de chiffres répétés plusieurs fois, donc : ([a-z0-9]+)
, après, pour le reste c'est compliqué sans savoir quel format exact peuvent prendre les données.
Ce qui donnerait pour l'instant en terme de groupes :
([0-9]+)\s+([a-z0-9]+)\s+-\s([\w\s]+[\+\w\s?]+)
+
suivi des mêmes conditions que ci-dessus, sauf que cette chaîne est facultativePour le troisième groupe, c'est soit "-" soit "perm" soit des chiffres (exemple: 994984) et le quatrième toutes les lettres de l'alphabets, ?
Moyens de me dire la solution :3 ?
Pour faire simpe avec les Regexp, c'est comme-ceci :
Pour créer un groupe qui permettra de créer une entrée de tableau, soit $
suivi d'un chiffre, il faut ouvrir une parenthèse
Tout ce qui sera contenu dans le groupe sera capturé dans la variable, ensuite il suffit de définir des conditions dans des tableaux []
, ces tableaux peuvent être suivis de conditions, comme par exemple : +
» répété une/plusieurs fois.
Pour ce qui est des conditions/chaînes à tester, tu peux regarder sur le site que je t'ai cité plus haut, il y a un cadre sur le côté qui contient un récapitulatif des règles.
Donc, le tiret dans la chaîne : 0 b2bb80f292b45b898a1b5056e9121ea1 - Test Bantime + Banlist UnBan
correspond a [Minutes left]
?
Si c'est bien le cas, voici ce que tu pourrais faire pour le 3ème groupe : ([-|perm|0-9]+)
.
Ce qui donnerait au final : ([0-9]+)\s+([a-z0-9]+)\s([-|perm|0-9]+)\s([\w\s][\+\w\s?]+)
.
J'ai bien sur défini le mot perm
dans la condition pour exclure tout autre possibilité, si tu préfères tu peux tout simplement lui définir la règle des lettres minuscules répétées plusieurs fois.
Au final j'ai fini mon regex, et il fonctionne plutôt bien !
/([0-9]+)\s ([a-zA-Z0-9]+) ([a-zA-Z0-9-]+) ([a-zA-Z0-9-+ ]+)/i