Regex negation chaine caractère
urahara78
Messages postés
294
Date d'inscription
Statut
Membre
Dernière intervention
-
ktm620enduro Messages postés 377 Statut Membre -
ktm620enduro Messages postés 377 Statut Membre -
Bonjour,
En ayant marre de me tirer les cheveux dans tous les sens pour savoir comment faire je viens poser ma question ici.
Je souhaite "tout simplement" récupérer des adresses IP ne commençant PAS par 192.
Hors en regex le symbole ^ utilisé dans [^192] ne convient pas car il recherche les nombres un à un et non la chaine de caractère complète.
J'ai vu sur cette page https://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group qu'ils ont trouvé apparemment un moyen d'y arriver mais je n'arrive pas à l'appliquer à mon exemple.
192\.\d+\.\d+\.\d+ match les ip commençant par 192
(?!192)\.\d+\.\d+\.\d+ devrait matcher celles ne commençant pas par 192, mais ça ne fonctionne pas.
Une idée? Car je commence à perdre espoir...
--
La 21 turbo c'est pas le genre de voiture pour aller faire les courses au supermarché mais plutôt pour faire la course jusqu'au supermarché !
En ayant marre de me tirer les cheveux dans tous les sens pour savoir comment faire je viens poser ma question ici.
Je souhaite "tout simplement" récupérer des adresses IP ne commençant PAS par 192.
Hors en regex le symbole ^ utilisé dans [^192] ne convient pas car il recherche les nombres un à un et non la chaine de caractère complète.
J'ai vu sur cette page https://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group qu'ils ont trouvé apparemment un moyen d'y arriver mais je n'arrive pas à l'appliquer à mon exemple.
192\.\d+\.\d+\.\d+ match les ip commençant par 192
(?!192)\.\d+\.\d+\.\d+ devrait matcher celles ne commençant pas par 192, mais ça ne fonctionne pas.
Une idée? Car je commence à perdre espoir...
--
La 21 turbo c'est pas le genre de voiture pour aller faire les courses au supermarché mais plutôt pour faire la course jusqu'au supermarché !
5 réponses
-
Testé en Java et sur ton site :
(([02]?[0-9]?[0-9])|(1[0-8][0-9])|(19[013-9]))\.\d+\.\d+\.\d+
Remarque: \d+ c'est un peu violent alors que seuls les nombres 0 à 255 sont autorisés.
La confiance n'exclut pas le contrôle -
hello
$ cat a1 192.1.1.1 193.1.1.1 200.1.1.1 333.192.1.1 192.2.3.4 $ $ grep -P '(?<!192)\.\d+\.\d+\.\d+$' a1 193.1.1.1 200.1.1.1 333.192.1.1 $
-
Salut,
Hors en regex le symbole ^ utilisé dans [^192] ne convient pas car il recherche les nombres un à un et non la chaine de caractère complète.
Et '[^1][^9][^2]' ne le ferait pas ?
-
[^1][^9][^2]\.\d+\.\d+\.\d+ sur les ip suivantes donne ça : ( ça match en gras)
192.1.1.1
200.4.4.4
900.5.5.5
290.4.4.4
333.2.1.9
291.3.3.3
210.3.3.3
EDIT :
J'utilise ce site pour tester mes regex : https://regexr.com/
La 21 turbo c'est pas le genre de voiture pour aller faire les courses au supermarché mais plutôt pour faire la course jusqu'au supermarché !
-
-
Salut,
"Je souhaite "tout simplement" récupérer des adresses IP ne commençant PAS par 192."
Si on suppose que la syntaxe est correcte,
exemple avec Regex:
Pour tester, les IP sont dans un tableau.String[] tabIp = {"192.1.1.1", "219.4.4.4", "220.5.5.5", "210.4.4.4", "125.2.1.9", "192.2.2.2", "211.3.3.3", "255.3.3.3"}; Pattern pat = Pattern.compile("192\\.."); // le motif est "192." for(int i = 0; i < tabIp.length; i++) { Matcher m = pat.matcher(tabIp[i]); if(m.find()) { System.out.println("On ne prend pas " + tabIp[i]); } else System.out.println("On prend " + tabIp[i]); }
exemple sans passer par Regex:
System.out.println("Avec startsWith(\"192.\")");
for(int i = 0; i < tabIp.length; i++)
{
if (tabIp[i].startsWith("192."))
System.out.println("On ne prend pas " + tabIp[i]);
else
System.out.println("On prend " + tabIp[i]);
}
Cordialement,
Dan -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut, je ne vois pas le problème, tu preg_match tes ip avec ton expression régulière et tu teste si la première capture est un 192...