J'utilise C # et je veux capturer testez-le ici Motif: p > Résultat expiré IP: PORT avec Regex mais comment le faire ne pas correspondre si après PORT le caractère est : code>? 1.22.234.255:8181:u:p // true, it should be false
1.22.234.255:80 // true
1.22.234.255 8080 // true
dddd1.22.234.255 80808 // true
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s]+(\d{2,5})(?!:)
3 Réponses :
Essayez d'utiliser deux expressions régulières différentes, ce sera plus simple
Expression 1 pour les espaces:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\:(\d{2,5})$
Expression 2 sans espaces, vous devez vous assurer qu'elle a une fin de vie caractère ou / m modificateur si vous avez plusieurs lignes:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{2,5})
Correspond à l'un des deux et fusionne les résultats.
merci, c'est une chaîne aléatoire Je ne peux pas utiliser ^ $ car la valeur pourrait être au milieu et le séparateur devrait être deux points ou un espace [: \ s]
Le problème est que votre expression de port Une façon de compenser cela est de changer votre modèle pour rejeter les deux-points et les chiffres : (\ d {2,5}) ne saisit pas tous les chiffres. Dans l'expression qui passe de manière inattendue, si vous regardez les groupes de correspondance, ils sont 1.22.234.255 et 818 ( pas 8181 ). L'expression rejette 1.22.234.255:8181 car elle est suivie d'un : , mais considère alors un port à 3 chiffres et accepte 1.22.234.255:818 car le caractère suivant est un 1 et non un : . (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s]+(\d{2,5})(?![0-9:])
Cette expression régulière fonctionne pour tous les cas
(\ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} ) \ s * (? :: \ s *)? (?
https://regex101.com/r/5faUcx/1
Version lisible
( # (1 start), IP
\d{1,3} \.
\d{1,3} \.
\d{1,3} \.
\d{1,3}
) # (1 end)
\s*
(?: : \s* )?
(?<! \d )
( \d{2,5} ) # (2), Port
(?! \d | \s* : )
essayez-vous de faire correspondre les adresses IP?
oui, mais ce n'est pas le problème, il n'a pas besoin d'être une adresse IP valide
Jetez un œil à < code> IPAddress.TryParse () , au lieu d'un Regex
Jetez également un œil à cette question
Je ne valide pas l'adresse IP mais je capture
IP: PORTà partir d'une chaîne aléatoireCette partie
[: \ s] +correspond à ceci:::::: :::: ::::::::::::::::::: :::::::: ::@sln la chaîne est une liste de proxy et copiée à partir de la page Web, 99,99% il n'y aura pas de telle chaîne: D
@cieunteung - Ce n'est pas une bonne forme de dire à 99,99%, comme sans plomb?